📄 zjc1.asm
字号:
STACK SEGMENT stack
db 200 dup(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK
START:
MOV AH,0 ;设置显示方式为4色图形,即320*200黑白图形方式
MOV AL,4
INT 10H
MOV AH,0BH ;设置背景色
MOV BH,0 ;彩色调色板ID
MOV BL,5;和ID配套使用的颜色
INT 10H
MOV AH,0BH ;设置彩色组
MOV BH,1 ;彩色调色板ID
MOV BL,3 ;和ID配套使用的颜色
INT 10H
mov ah,15
int 10h ;读当前显示状态,页号-->bh
mov cx,2 ;要输入的字符个数为2-->cx
mov dx,0 ;置初始行、列为0
RE1: ;设置光标的位置,并显示小鸟飞翔时的状态
mov ah,2
int 10h ; 设置光标的位置
mov al,76h
mov ah,10
int 10h ;在当前位置显示飞翔状态
call delay
call delay
RE2: ;为了显示小鸟平滑时的状态
mov ah,0ah
mov al,2Dh
mov bh,0
mov cx,2 ;显示平滑状态
int 10h
call delay ;延时调用
call screamclear ;清除原图形
call delay
inc dh
add dl,2 ;设置移动时行和列对应移动的个数
test dh,01h ;用测试指令判断, 当行数为奇数的时候跳转到RE2处执行,(关键语句)!
jne RE2
cmp dh,25 ;控制行的循环,控制行数为25
JNE RE1
MOV AH,4CH
INT 21h
delay proc ;延时子程序,通过指令的跳转换取时间,作为延时的时间。
push cx
push dx ;寄存器进栈
mov dx,50000 ; 将50000赋给寄存器dx
dl500:
mov cx,5000 ;将5000赋给cx
dl10ms:
loop dl10ms ;循环指令,将cx-1->cx,该指令执行了5000次。
dec dx ;dx递减,当dx=0时跳转。
jnz dl500
pop dx
pop cx ;寄存器出栈
ret ;返回调用处
delay ENDP ;延时子程序结束
screamclear proc ;清屏子程序
push ax
push bx
push cx
push dx ;对寄存器用堆栈保护
mov ax,0650h
mov bh,3
mov cx,0
mov dx,184Fh
int 10h ;6号中断调用,屏幕全部翻滚,实现清屏的功能
pop dx
pop cx
pop bx
pop ax ;将寄存器出栈
ret ;返回主程序调用处
screamclear endp ;清屏子程序结束
CODE ENDS
END START ;代码段结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -