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

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
  •  浮躁10次=fool 浮躁20次=fathead 浮躁30次=stupid 浮躁40次=pig
  • 『姓名』:small liu
  • 『性别』:男『发送消息
  • 个人说明:我现在浮躁 指数4
  • 详细信息『加为好友』
学习动态
友情链接

[2009-06-29 15:04] 自己独立设计的17.3完整程序,输入显示字符窜允许删除,enter键表示输入结束,报错非ASCII显示

图片载入中
;自己独立设计的17.3完整程序,输入显示字符窜允许删除,enter键表示输入结束,报错非ASCII显示

assume cs:code,ss:charstack
charstack segment
 db 1024 dup(0)
 table dw a,b
 a db 'please input some string :',0
 b db 'Warning:can not show it',0
charstack ends

code segment
start: mov ax,charstack
       mov ss,ax
       mov sp,128
       mov di,16*160
       mov si,ss:table[0] 
       mov bx,2    ;前后景            
       call showstr
;显示请求输入字符窜,输入字符窜在请求信息后

       mov bx,7    ;默认前后景  
       mov si,0
 input:mov ah,0
       int 16h
       cmp al,20h
       jb nochar
       mov ss:[si],al
       call showstr
       jmp input
;显示输入的字符窜,对于非ASCII码字符转入nochar
 
nochar:  cmp ah,1ch
         je enter
         cmp ah,0eH
         je backspace
         push si
         mov si,ss:table[2]
         push di
         mov di,23*160
         push bx
         mov bl,4
         call showstr
         pop bx
         pop di
         pop si
         jmp input        
;nochar作用,报错无ASCII码字符并返回等待重新输入,处理backspace键和enter键

         
backspace:cmp si,0
          je input
          push bx
          mov bh,1
          call showstr
          pop bx
          mov byte ptr ss:[si],0
          dec si        
          jmp input

enter: mov ax,4c00h
       int 21h


showstr:push ds
        push es
                
        push si
        mov si,ss
        mov ds,si
        mov si,0b800h
        mov es,si
        pop si
        cmp bh,1
        je subshowstr
        cld
     ls:cmp byte ptr ds:[si],0
        je over
        movsb
        mov byte ptr es:[di],bl
        inc di
        jmp ls

subshowstr:dec di
           dec di
           mov word ptr es:[di],' '
       
over:   pop es
        pop ds
        ret
;showstr作用:显示字符,必要参数si=源地址址,di=目标地址
;                      默认参数 ds=ss,es=0b800h
;                      可选参数 bx, bl=颜色,bh=1为启动subshowstr

code ends

end start
评论次数(2)  |  浏览次数(1888)  |  类型(汇编作业) |  收藏此文  | 

[  游客   发表于  2009-06-30 11:53  ]

我觉得你的程序没有什么逻辑上的问题啊。出现了你的错误提示,说明这个输入的字符ascii码小于20H,且不是回车或退格,我运行试了几次,在正常输入情况下没有发现问题,当输入tab等键是,也能正常提示出错误信息,然后此错误信息会一直存在,是不是这个现象引起的错觉?我按照你图示的样子试了,没发现异常,然后看了一下你的逻辑,也没找到什么可疑的地方。
不过,不知道为什么在nochar中在进行回车和退格的判断你要用扫描码,而不是用ascii码呢?

[  游客   发表于  2009-06-30 14:19  ]

因为nochar 就表示非ASCII键 即没有对应ASCII的键盘输入 所以我用扫描码来判断

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