. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->使用BIOS进行键盘输入和磁盘读写
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  自己写的 17.3 所有功能完美实现  [待解决] 回复[ 1次 ]   点击[ 527次 ]  
zhenglxd
[帖 主]   [ 发表时间:2009-06-29 15:07 ]   [引用]   [回复]   [ top ] 
荣誉值:30
信誉值:0
注册日期:2009-04-09 10:05
;自己独立设计的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
       
;老规矩所有代码直接copy到.txt 然后做成exe文件用debug载入即可 非ASCII字符红字提示 enter结束 backspace删除字符 搞了5小时全是自己独立完成的
mywiil
[第1楼]   [ 回复时间:2009-07-01 15:57 ]   [引用]   [回复]   [ top ] 
荣誉值:61
信誉值:4
注册日期:2008-10-14 16:29
不错,顶了!
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved