?? car.asm
字號:
DATA SEGMENT
INFO1 DB 0DH,0AH,'INPUT 1,2,OR 3:(1:bird,2:car,3:exit) $'
BUFA DB 200
DB ?
DB 200 DUP(0)
BUFB DB 200 DUP(?)
BIRD DB 76H,10,0,0 ;小鳥的字符圖形表
DB 0C4H,07,0,1
DB 76H,10,-2,2
DB 0C4H,07,0,1
DB 76H,10,-2,2
DB 0C4H,07,0,1
DB 76H,10,-2,2
DB 0C4H,07,0,1
DB 76H,10,2,-2
DB 0C4H,07,0,1
DB 76H,10,2,-2
DB 0C4H,07,0,1
DB 76H,10,2,-2
DB 0C4H,07,0,1
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
STACK SEGMENT stack
DB 200 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
start:mov ax,data
mov ds,ax
mov ah,0 ;設置顯示方式為320*200彩色圖形方式
mov al,4
int 10h
lea dx,info1 ;在顯示器上顯示字符串提示信息
mov ah,9
int 21h
mov ah,0 ;從鍵盤讀取字符到AL寄存器
int 16h
CMP AL,31H ;比較AL是否等于1
JNE A
CALL XIAO
A: CMP AL,32H ;比較AL是否等于2
JNE B
CALL QICHE
B: CMP AL,33H ;比較AL是否等于3
JNE START
MOV AH,4CH ;終止當前程序并返回調用程序
INT 21H
CLEAR MACRO pch,pcl,pdh,pdl,pbh ;清屏宏定義
MOV AH,0
MOV AL,4
INT 10H
MOV AH,6 ;調用6號功能
MOV AL,0 ;設置整個屏幕為空白
MOV CH,pch
MOV CL,pcl ;窗口左上角(0行,0列)
MOV DH,pdh
MOV DL,pdl ;窗口右下角(24行,79列)
MOV BH,pbh ;正常屬性顯示
INT 10H
ENDM
xiao proc ;小鳥子程序
PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV AH,0
MOV AL,4
INT 10H
MOV AH,0BH ;設置背景色
MOV BH,0
MOV BL,1
INT 10H
MOV AH,0BH ;設置彩色組
MOV BH,1
MOV BL,1
INT 10H
CLEAR 0,0,24,79,7
MOV AH,0FH ;讀當前顯示狀態
INT 10H
MOV DH,10
MOV DL,0
BEGIN: MOV SI,2
MOV CX,1
LEA DI,BIRD ;DI指向小鳥字符表的首字母
DISP: CMP DL,80
JAE exit1
MOV AH,2 ;設置光標位置
INT 10H
MOV AH,9 ;顯示小鳥字符圖形
MOV AL,[DI]
MOV BL,[DI+1]
INT 10H
CALL DLY ;延時
MOV AH,9
MOV AL,' '
MOV BL,04
INT 10H
INC DL
ADD DI,2
DEC SI
JNZ DISP
JMP BEGIN
exit1: RET
xiao endp
DLY PROC NEAR ;延時子程序
PUSH CX
PUSH DX
MOV DX,10000
DL1: MOV CX,6801
DL2: LOOP DL2
DEC DX
JNZ DL1
POP DX
POP CX
RET
DLY ENDP
QICHE PROC near ;汽車子程序
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AH,0
MOV AL,4
INT 10H
MOV AH,0BH ;設置彩色組顏色為綠、紅、黃
MOV BH,01
MOV BL,00
INT 10H
CLEAR 0,0,24,79,7 ;清屏宏調用
LEA DI,CAR ;DI指向字符圖形表
MOV DH,5 ;從第5行5列位置開始顯示汽車
MOV DL,0
CALL MOVE_SHAPE
RET
QICHE ENDP
MOVE_SHAPE PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DI
MOV AH,0FH ;取當前顯示方式
INT 10H
SUB CH,CH
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
Pop DI
Pop DX
Pop CX
Pop BX
Pop AX
jmp exit2
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
CALL ERASE
JMP SHORT PLOT_NEXT
exit2: ret
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
CODE ENDS
END start
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -