⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zjc1.asm

📁 用汇编实现小鸟的飞翔
💻 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 + -