汇编网首页登录博客注册
yugong的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
友情链接

[2008-12-08 19:15] 字符串的输入——经典

好好欣赏这个程序的逻辑构架,很经典的!!!还有很经典的技巧!
(dh)(dl)=字符串在屏幕上显示的行列位置
assume cs:code
code segment
start: mov dh,12
      mov dl,4
      call getstr
          
      mov ax,4c00h
      int 21h
        
getstr:  push ax

getstrs: mov ah,0    ;用int 16h中断从键盘缓存区取数据
        int 16h          扫描码送入ah,ASCII码送入al
        cmp al,20h   ;ASCII码小于20h,说明不是字符
        jb nochar
        mov ah,0
        call charstack
        jmp getstrs

nochar:  cmp ah,0eh   ;退格键的扫描码
        je backspace
        cmp ah,1ch   ;Enter键的扫描码
        je enter
        jmp getstrs

backspace: mov ah,1
        call charstack
        mov ah,2
        call charstack
        jmp getstrs

enter:  mov al,0
        mov ah,0
        call charstack
        mov ah,2
        call charstack
        pop ax
        ret                
        
;子程序:字符栈的入栈、出栈和显示
;参数说明:(ah)=功能号,0表示入栈,1表示出栈,2表示显示;
;ds:si指向字符栈空间
;对于0号功能:(al)=入栈字符
;对于1号功能:(al)=返回的字符
;对于2号功能:(dh)(dl)=字符串在屏幕上显示的行列位置。
charstack:jmp short charstart
 
table dw charpush,charpop,charshow  ;程序入口的直接定址表
top   dw 0
charstart: push bx
          push dx
          push di
          push es
                  
          cmp ah,2
          ja  sret
          mov bl,ah
          mov bh,0
          add bx,bx
          jmp word ptr table[bx];与表之间的映射关系
charpush: mov bx,top
         mov [si][bx],al
         inc top 
         jmp sret
                 
charpop : cmp top,0
         je sret
         dec top 
         mov bx,top
         mov al,[si][bx]
         jmp sret

charshow: mov bx,0b800h
         mov es,bx
         mov al,160
         mov ah,0
         mul dh     ;计算行
         mov di,ax
         add dl,dl  ;计算列
         mov dh,0   
         add di,dx  ;得到在屏幕上的位置

         mov bx,0

charshows: cmp bx,top
         jne noempty
         mov byte ptr es:[di],' '
         jmp sret
noempty: mov al,[si][bx]
        mov es:[di],al
        mov byte ptr es:[di+2],' '
        inc bx
        add di,2
        jmp charshows

sret:   pop es
        pop di
        pop dx
        pop bx
        ret                
code ends
end        start
评论次数(4)  |  浏览次数(1728)  |  类型(汇编作业) |  收藏此文  | 

[  游客   发表于  2008-12-08 21:26  ]

能收获代码之外的东西就相当不错。
博主努力也写俩经典的代码出来吧。

[  yugong   发表于  2008-12-08 22:07  ]

哈哈,多谢鼓励!大家一起进步哦

[  zrwxj3581   发表于  2008-12-09 09:37  ]

大歌们谁能告诉我汇编屏幕分辨率80*25和字体用彩色

[  younggay   发表于  2008-12-09 22:06  ]

大歌们谁能告诉我汇编屏幕分辨率80*25和字体用彩色
--------------
自己按照《汇编语言》中的实验9的原理去写不可以么?

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码