📄 12.asm
字号:
DATA SEGMENT
car db 238 ;定义字符图形表
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,-3
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,0,-2
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,-3
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,-2
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,0,-2
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,-7,2
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,-3
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,-3,-3
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,-2,1
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,0,-1
db 2ah,50,0,-1
db 2ah,50,0,-1
db 2ah,50,0,-1
db 2ah,50,0,-1
db 2ah,50,0,-1
db 2ah,50,-1,0
db 2ah,50,1,0
db 2ah,50,1,3
db 2ah,50,1,-2
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,1,-2
db 2ah,50,1,-3
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,-7,2
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,-3
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,0,-3
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,-7,3
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,-1,-3
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,1,-1
db 2ah,50,1,-1
db 2ah,50,1,-1
db 2ah,50,1,-1
db 2ah,50,-4,4
db 2ah,50,1,1
db 2ah,50,1,1
db 2ah,50,1,1
db 2ah,50,1,1
db 2ah,50,-7,3
db 2ah,50,0,2
db 2ah,50,0,2
db 2ah,50,1,2
db 2ah,50,1,0
db 2ah,50,-1,-1
db 2ah,50,0,-1
db 2ah,50,0,-1
db 2ah,50,0,-1
db 2ah,50,0,-1
db 2ah,50,0,-1
db 2ah,50,0,-1
db 2ah,50,1,0
db 2ah,50,1,2
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,1,-1
db 2ah,50,1,-1
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,1,0
db 2ah,50,0,-1
db 2ah,50,-3,-2
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
db 2ah,50,0,1
COLOR DB 80,100,140,160,220,20,30,55,60,75,100
CHAR_CNT DW ?
POINTER DW ?
LINE_ON DB ?
COL_ON DB ?
DATA ENDS
STACK SEGMENT
DB 2040 DUP (0)
STACK 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*204彩色图形方式
MOV AL,03H
INT 10H
MOV AH,0BH ;设置背景颜色
MOV BH,0
MOV BL,2
INT 10H
MOV AH,0BH ;设置彩色调板
MOV AL,0
MOV BL,10H
INT 10H
CALL CLEAR_SCREEN ;清屏
LEA DI,CAR ;di指向字符图形表
LEA SI,COLOR
MOV DH,10 ;从第5行第5列位置开始
MOV DL,-98 ;显示汽车
START:
CALL MOVE_SHAPE
INC SI
JMP START
RET
MAIN ENDP
CLEAR_SCREEN PROC NEAR ;清屏子程序
PUSH AX ;保护寄存器
PUSH BX
PUSH CX
PUSH DX
MOV AH,6 ;屏幕上卷功能
MOV AL,6
MOV CH,0 ;左上角行号
MOV CL,0 ;左上角列号
MOV DH,250 ;右下角行号
MOV DL,204 ;右下角列号
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,204 ;出屏否?
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,[SI] ;取字符值及属性
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
MOV AH,0BH;;;;
INT 21H;;;;;;;;;;
INC AL;;;;;;;;;;;;;
JZ WAIT1;;;;;;;;;;
WAIT2: DEC COL_ON
WAIT1:
MOV DL,COL_ON
RET
ERASE ENDP
DLY_QRTR PROC NEAR ;延时子程序
PUSH CX
PUSH DX
MOV DX,5000
D11: MOV CX,20400
D12: LOOP D12
DEC DX
JNZ D11
POP DX
POP CX
cmp al," " ;如果键入SPACE,则游戏暂停
je pause
pass: pop cx
inc cx
pause: push dx ;暂停处理
mov ah,06h
mov dl,0ffh
int 21h
pop dx
cmp al," "
jne pause
jmp pass
RET
DLY_QRTR ENDP
CODE ENDS
END MAIN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -