📄 xiaoche.asm
字号:
DATA SEGMENT
CAR DB 7 ;字符图形表
DB 52H,7,0,0
DB 0B1H,7,0,1
DB 0DBH,7,0,1
DB 0DBH,7,0,1
DB 4FH,7,1,0
DB 4FH,7,0,-3
DB 2,7,-2,1
CHAR_CNT DW ?
POINTER DW ?
LINE_ON DB ?
COL_ON DB ?
DATA ENDS
;
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MAIN PROC FAR
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATA ;初始化DS
MOV DS,AX
MOV AH,0 ;设置300×200彩色图形方式
MOV AL,3
INT 10H
MOV AH,0BH ;设置背景颜色
MOV BH,0
MOV BL,2
INT 10H
MOV AH,0BH ;设置彩色调板
MOV BH,01
MOV BL,00
INT 10H
CALL CLEAR_SCREEN ;清屏
LEA DI,CAR ;DI指向字符图形表
MOV DH,5 ;从第5行5列位置开始
MOV DL,5 ;显示汽车
CALL MOVE_SHAPE
RET
MAIN ENDP
;
CLEAR_SCREEN PROC NEAR
PUSH AX ;保护寄存器
PUSH BX
PUSH CX
PUSH DX
MOV AH,6 ;屏幕上卷功能
MOV AL,0
MOV CH,0 ;左上角行号
MOV CL,0 ;左上角列号
MOV DH,24 ;右下角行号
MOV DL,79 ;右下角列号
MOV BH,7 ;卷入行属性
INT 10H ;调用显示属性
POP DX ;恢复寄存器
POP CX
POP BX
POP AX
RET ;返回主程序
CLEAR_SCREEN ENDP
;
MOVE_SHAPE PROC NEAR
PUSH AX ;
PUSH BX
PUSH CX
PUSH DX
PUSH DI
MOV AH,0FH ;取当前显示方式
INT 10H
SUB CH,CH ;清除计数器CX的高字节
MOV CL,[DI] ;CL放循环次数
INC DI ;DI指向字符图形表中的第一个字符
MOV CHAR_CNT,CX ;保存循环次数
MOV POINTER,DI
MOV LINE_ON,DH
MOV COL_ON,DL
PLOT_NEXT:ADD DH,[DI+2] ;改变行列指针
ADD DL,[DI+3]
CMP DL,80 ;出屏否?
JB MOV_CRSR
CALL ERASE
POP DI
POP DX
POP CX
POP BX
POP AX
RET
MOV_CRSR:MOV AH,2 ;移动光标位置
INT 10H
MOV AL, [DI]
MOV BL,[DI+1] ;取字符值及属性
PUSH CX
MOV CX,1
MOV AH,09 ;显示字符
INT 10H
POP CX
ADD DI,4 ;DI指向下一个字符
LOOP PLOT_NEXT
CALL DLY_QRTR ;调用延时子程序
CALL ERASE ;调用擦除子程序
JMP SHORT PLOT_NEXT
MOVE_SHAPE ENDP
;
ERASE PROC NEAR
MOV CX,CHAR_CNT
MOV DI,POINTER
MOV DH,LINE_ON
MOV DL,COL_ON
ERASE_NEXT:ADD DH,[DI+2]
ADD DL,[DI+3]
MOV AH,2
INT 10H
MOV AL,[DI]
MOV BL,0
PUSH CX
MOV CX,1
MOV AH,9
INT 10H
POP CX
ADD DI,4
LOOP ERASE_NEXT
MOV CX,CHAR_CNT
MOV DI,POINTER
MOV DH,LINE_ON
INC COL_ON
MOV DL,COL_ON
RET
ERASE ENDP
;
DLY_QRTR PROC NEAR ;延时子程序
PUSH CX
PUSH DX
MOV DX,5000
D11:MOV CX,2801
D12:LOOP D12
DEC DX
JNZ D11
POP DX
POP CX
RET
DLY_QRTR ENDP
CODE ENDS
END MAIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -