📄 autocar.asm
字号:
DISP MACRO ADDR
LEA DX,ADDR
MOV AH,09H
INT 21H
ENDM
INPT MACRO
MOV AH,01H
INT 21H
ENDM
;********************设置汽车公路的相关数据******************
STACK SEGMENT STACK
DB 256 DUP(?)
TOP LABEL WORD
STACK ENDS
DATA SEGMENT
CAR DB 5 DUP(20H) ;汽车图形数据
DW 0DBDBH
DB 154 DUP(20H)
DW 0DBDBH
DB 20H
DW 0DBDBH
DB 20H
DW 0DBDBH
DB 20H
DW 0DBDBH
DB 151 DUP(20H),4FH,5 DUP(20H),4FH
LENCAR DW 330 ;汽车显示总长度
ROAD DW 80 DUP(01616H) ;公路图形数据
LENROAD DB 80 ;公路显示总长度
YQZ DB ' WELCOME TO PROGRAM OF YOUNGER!'
DB 0DH,0AH,' PRESS ANY KEY TO BEGIN!$'
ZQY DB 0DH,0AH,0DH,0AH,0DH,0AH,' PRESS ANY KEY TO EXIT!$'
DATA ENDS
;**************************************************************
;**************************程序代码区**************************
CODE SEGMENT
ASSUME CS:CODE,DS:DATA ,SS:STACK
START: MOV AX,DATA ;程序开始
MOV DS,AX
LEA BP,CAR ;将汽车数据传给显示入口
MOV ES,AX
MOV AX,STACK
MOV SS,AX
MOV SP,OFFSET TOP
DISP YQZ
INPT
MOV CX,69D ;69祯画面
MOV DH,6D ;第6行
MOV DL,00H ;第0列
S0: ;动画
CALL CARDISPLAY ;画汽车
INC DL ;向后移一列
CALL DELAY ;停留一小段时间
LOOP S0 ;如果没到第69祯,继续画
EXIT: DISP ZQY ;返回DOS
INPT
MOV AX,4C00H
INT 21H
;**************************显示汽车子程序**********************
CARDISPLAY PROC NEAR
CALL CLEAR ;清屏
PUSH DX
PUSH CX
MOV CX,LENCAR ;设置显示汽车长度
MOV BH,00H ;第0页
MOV BL,0F9H ;白色背景(F) 蓝色前景(9)
MOV AX,1301H ;显示汽车
INT 10H
POP CX
POP DX
RET
CARDISPLAY ENDP
;**************************************************************
;***************************清屏子程序*************************
CLEAR PROC NEAR
PUSH AX ;保存寄存器内容
PUSH BX
PUSH CX
PUSH DX
PUSH BP
PUSH ES
MOV AX,0600H ;AH=06(滚动) AL=00(全屏空白)
MOV BH,0F0H ;黑色背景(0) 白色前景(F)
SUB CX,CX ;左上角行:列
MOV DX,184FH ;右下角行:列
INT 10H
MOV DH,11D ;第11行
CALL ROADDISPLAY
MOV DH,12D ;第12行
CALL ROADDISPLAY
POP ES ;恢复寄存器内容
POP BP
POP DX
POP CX
POP BX
POP AX
RET
CLEAR ENDP
;**************************************************************
;**************************显示子程序2*************************
ROADDISPLAY PROC NEAR
MOV AX,DATA
MOV DS,AX
LEA BP,ROAD ;将公路数据传给显示入口
MOV ES,AX
MOV DL,00H ;第0列
MOV CH,00H
MOV CL,LENROAD ;设置显示公路长度
MOV BH,00H ;第0页
MOV BL,0F5H ;白色背景(F) 棕色前景(9)
MOV AX,1301H ;显示公路
INT 10H
RET
ROADDISPLAY ENDP
;**************************************************************
;***************************延时子程序*************************
DELAY PROC
PUSH CX ;保存寄存器内容
PUSH DX
MOV DX,0FFFH
UP: XOR CX,CX ;延时
A: LOOP A
DEC DX
JNZ UP
POP DX ;恢复寄存器内容
POP CX
RET ;返回
DELAY ENDP
;**************************************************************
CODE ENDS
END START ;程序结束
;**************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -