📄 birdfly.asm
字号:
;程序开始,创建数据段,赋值.
DATA SEGMENT
INFO1 DB 0DH,0AH,'INPUT 1,OR2:(1:flyin bird ,2:exit) $'
BIRD DB '\',7,'/',7,'_',7,'_',7 ;小鸟的字符图形表 ,92为\,47为/,95为_,7为颜色白色
DATA ENDS ;数据段结束
;
STACK SEGMENT STACK ;创建200字节的栈段 用0填充
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
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 ;如果不是1就转到A处
CALL XIAO ;如果是1就转到子程序XIAO处
A: CMP AL,32H ;比较AL是否等于2
JNE START ;如果也不等于2就回到程序起点处 如果是就继续
MOV AH,4CH ;终止当前程序并返回调用程序
INT 21H ;
;
CLEAR MACRO ;清屏宏定义
MOV AH,0
MOV AL,4
INT 10H
ENDM
;
DLY PROC NEAR ;延时子程序
PUSH CX
PUSH DX
MOV DX,10000 ;这个值越大,速度越慢
DL1: MOV CX,0
DL2: LOOP DL2
DEC DX
JNZ DL1
POP DX
POP CX
RET
DLY ENDP
;
XIAO PROC ;小鸟子程序入口
PUSH DS ;数据段入栈
MOV AX,0 ;AX归零
PUSH AX ;AX进栈
MOV AX,DATA ;设定代码段
MOV DS,AX
CLEAR ;清屏
MOV DH,0 ;设小鸟初始位置Y轴位置 最左上角为 DH=0,DL=0 小鸟的位置就靠
MOV DL,0 ;设小鸟初始位置X轴位置 最右下角为 DH=24,DL=79 改变这两个值
BEGIN: ;开始显示小鸟
MOV SI,2 ;
MOV CX,1 ;字符重复次数为1
;
LEA DI,BIRD ;DI指向小鸟字符表的首字母
;
DISP: CMP DH,24 ;设定结束情况为移动到X=25位置就执行EXIT1退出
JAE EXIT1
MOV AH,2 ;设置光标位置
INT 10H
MOV AH,9 ;显示小鸟字符图形
MOV AL,[DI]
MOV BL,[DI+1]
INT 10H
inc dl
MOV AH,2 ;设置光标位置
INT 10H
MOV AH,9 ;显示小鸟字符图形
MOV AL,[DI+2]
MOV BL,[DI+3]
INT 10H
CALL DLY ;延时
dec dl
MOV AH,2 ;设置光标位置
INT 10H
MOV AH,9 ;小鸟消失
MOV AL,' '
MOV BL,04
INT 10H
inc dl
MOV AH,2 ;设置光标位置
INT 10H
MOV AH,9 ;小鸟消失
MOV AL,' '
MOV BL,04
INT 10H
inc dh ;小鸟Y坐标加1
ADD DI,4
DEC SI
JNZ DISP
JMP BEGIN
EXIT1: RET ;
XIAO ENDP ;小鸟子程序结束
CODE ENDS ;代码段结束
END START ;主程序结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -