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

📄 nankai.asm

📁 该示例用汇编实现了精确文字的显示
💻 ASM
字号:
data     segment
car      db 120               ;定义字符图形表,共显示120个字符
         db 06h,62,0,0        ;其中第一字节为显示的字符,第二字节为显示属性,三。四字节为
         db 06h,62,0,1           ;行标,列标      
         db 06h,62,0,1        
         db 06h,62,0,1         
         db 06h,62,-1,0       
         db 06h,62,-1,0
         db 06h,62, -1,0 
         db 06h,62,3,1
         db 06h,62,0,1
         db 06h,62,0,1
         db 06h,62,1,-3
         db 06h,62,1,0
         db 06h,62,1,0
         db 06h,62,0,-1
         db 06h,62,0,-1
         db 06h,62,0,-1
         db 06h,62,0,-1
         db 06h,62,0,-1
         db 06h,62,1,0
         db 06h,62,1,0
         db 06h,62,1,0
         db 06h,62,1,0
         db 06h,62,1,0
         db 06h,62,1,0
         db 06h,62,1,0
         db 06h,62,1,0
         db 06h,62,1,0
         db 06h,62,-3,1
         db 06h,62,0,1
         db 06h,62,0,1
         db 06h,62,0,1
         db 06h,62,0,1
         db 06h,62,0,1
         db 06h,62,0,1
         db 06h,62,0,1
         db 06h,62,0,1
         db 06h,62,1,-4
         db 06h,62,1,0
         db 06h,62,1,0
         db 06h,62,-4,0
         db 06h,62,-1,0
         db 06h,62,-1,0
         db 06h,62,0,1
         db 06h,62,0,1
         db 06h,62,0,1
         db 06h,62,0,-4
         db 06h,62,0,-1
         db 06h,62, 0,-1
         db 06h,62,-2,1
         db 06h,62,1,1
         db 06h,62 ,0,3
         db 06h,62,-1,1
         db 06h,62,-1,-2
         db 06h,62,0,1
        ; db 06h,62,0,1
         db 06h,62,0,1
         db 06h,62,0,1
         db 06h,62,0,1
         db 06h,62,0,1
         db 06h,62,1,0
         db 06h,62,1,0
         db 06h,62,1,0
         db 06h,62,1,0
         db 06h,62,1,0
         db 06h,62,1,0
         db 06h,62,1,0
         db 06h,62,1,0
         db 06h,62,1,0
         db 06h,62,-1,-1
         db 06h,62,-8,6
         db 06h,62,0,1
         db 06h,62,0,1
         db 06h,62,0,1
         db 06h,62,0,1
         db 06h,62,0,1
         db 06h,62,-1,0
         db 06h,62,-1,0
         db 06h,62,-1,0

         db 06h,62,-1,0
         db 06h,62,0,-1
         db 06h,62,0,-1
         db 06h,62,0,3
         db 06h,62,0,1
         db 06h,62,0,1
         db 06h,62,0,1
         db 06h,62,0,1
         db 06h,62,0,1
         db 06h,62,0,1
         db 06h,62,1,-2
         db 06h,62,1,0
         db 06h,62,1,0
         db 06h,62,1,0
         db 06h,62,1,0
         db 06h,62,1,0
         db 06h,62,1,0
         db 06h,62,1,0
         db 06h,62,1,0
         db 06h,62,1,0
         db 06h,62,1,0
         db 06h,62,-7,1
         db 06h,62,0,1
         db 06h,62,0,1
         db 06h,62,0,-4
         db 06h,62,0,-1
         db 06h,62,0,-1
         db 06h,62,0,-1
         db 06h,62,1,-1
         db 06h,62,1,0
         db 06h,62, 1,0
         db 06h,62,1,0
         db 06h,62,1,0
         db 06h,62,1,-1
         db 06h,62,1,-1
             char_cnt dw ?   ;            
pointer  dw ?                ;   
line_on  db ?                ;
col_on   db ?                ;
data     ends
stack    segment
         db  2000 dup (0)
stack    ends
code     segment
         assume cs:code,ds:data,ss:stack
main proc  far
     push  ds                    ;使ax为0
     sub   ax,ax
     push  ax
     mov   ax,data
     mov   ds,ax
     
     mov   ah,0                   ;置显示方式,04——图形格式,4色,象素320*200
     mov   al,4                        
     int   10h
     
     mov   ah,0bh                 ;置彩色调色板,bh=0时为置背景色,此时bl=2为色彩象素代码
     mov   bh,0
     mov   bl,2
     int   10h
     
     mov   ah,0bh                 ;置彩色调色板,bh=01h时为选调色板,此时bl=00为调色板号
     mov   bh,01h
     mov   bl,00
     int   10h
     
     call  clear_screen           ;调用清屏子程序
     lea   di,car                 ;取数据地址到di
     mov   dh,10                  ;从第十行
     mov   dl,4                   ;  第四列开始显示第一个字符
     call  move_shape             ;  调用显示子程序     
     mov   ah,8                   ;  从键盘读一字符但不回显
     int   21h                    ;
     cmp   al,'q'                 ;  所输入的字符与'q' 相比较,若等则结束显示,否则继续
     jz    exit
     ret                          ;  主过程结束 
     main endp  

clear_screen proc near           ; 清屏子程序开始,将过程中用到的积存器压栈
     push  ax
     push  bx
     push  cx
     push  dx
     mov   ah,6                ;当前显示页上滚
     mov   al,0                ;al=滚动的行数
     mov   ch,0                ;ch=左上角行数
     mov   cl,0                ;cl=左上角列数
     mov   dh,120              ;dh=右下角行数
     mov   dl,200              ;dl=右下角列数
     mov   bh,7                ;bh=上滚时填补的空行的属性,07表正常
     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               ;使ch =0
     mov   cl,[di]             ;将133送cl,控制循环133次
     inc   di
     mov   char_cnt,cx
     mov   pointer,di
     mov   line_on,dh
     mov   col_on,dl
   mov_crsr: 
     add   dh,[di+2]           ;从数据表的第二行起,每行的第三个内容送dh,dh=光标所在行
     add   dl,[di+3]           ;从数据表的第二行起,每行的第四个内容送dl,dl=光标所在列
     mov   ah ,2               ;置光标位置
     int   10h                 ;
     mov   al,[di]             ;从数据表的第二行起,每行的第一个内容送al=要显示的字符
     mov   bl,[di+1]           ;从数据表的第二行起,每行的第二个内容送 bl=显示字符的属性
     push  cx
     mov   cx,1                 ;写的次数
     mov   ah,09                ;写字符到当前光标处
     int   10h                  ;
     pop   cx
     add   di,4                 ;di指向数据表下一行的第一字节
     loop  mov_crsr             ;若cx不为0,则循环
     calL  dly_qrtr             ;调用延时子程序
     pop   di         
     pop   dx
     pop   cx
     pop   bx
     pop   ax
     ret
move_shape endp
dly_qrtr proc near             ; 延时程序开始    
     push  cx
     push  dx
     mov   dx,5000             ;外循环控制5000次
 d11:mov   cx,25000            ; 内循环控制25000次
 d12:loop d12                  
     dec   dx                  ;dx 减一
     jnz   d11                 ;非0继续循环
     pop   dx
     pop   cx
     ret                       ;延时程序返回
dly_qrtr endp
exit:mov   ah,4ch              ;结束进程
     int   21h
code ends
     end main



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -