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

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
  •  原泉混混,不舍昼夜。盈科而后进,放乎四海,有本着如是,是之取尔!
  • 『姓名』:杨逍
  • 『性别』:男『发送消息
  • 个人说明:
  • 详细信息『加为好友』
学习动态
最新留言

[2009-09-19 21:11] 17.3字符串的接收、显示以及删除(2)

图片载入中
题目:编程,编写一个接受字符串输入的程序,应该有如下功能:

(1)在输入的同时需要显示这个字符串

(2)一般在输入回车符后,字符串输入结束

(3)能够删除已经输入的字符

解答:只是写个测试程序而已



assume cs:codesg,ds:datasg
datasg segment
    db 4000 dup(0)
datasg ends

codesg segment
    start: 
           
    mov ax,datasg
    mov ds,ax
    mov si,0 
    
    mov dh,12
    mov dl,0;设置显示的行号和列号
    call getstr;调用处理字符串的子程序
    
    mov ax,4c00h
    int 21h

   
getstr:
    push ax
    
getstrs:
    mov ah,0
    int 16h
    cmp al,20h;如果输入的字符的ASCII码值小于20h,就不是字符
    jb isnotchar
    mov ah,0
    call charstack;否则的话就是字符,调用charstack的0号功能,将其ASCII码值入栈保存起来
    mov ah,2
    call charstack;调用charstack的2号功能显示字符串
    jmp getstrs;显示完之后返回getstrs处继续读取输入的字符

;如果不是字符,就来判断是否是enter键和backspace键    
isnotchar:
    cmp ah,0eh
    je backspace ;是baqckspace键就去删除字符的子程序
    cmp ah,1ch
    je enter ;是enter键就压入0
    jmp getstrs;完了还是返回继续读取键盘输入的字符            

;删除字符    
backspace:
    mov ah,1
    call charstack;调用charstack的1号功能
    mov ah,2
    call charstack;删除完了还要继续显示字符串
    jmp getstrs

;    
enter:
    mov al,0
    mov ah,0
    call charstack;调用charstack的0号功能压入0
    mov ah,2
    call charstack;显示字符串
    pop ax
    ret


    
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;如果功能号大于2则跳出此子程序
    mov bl,ah
    mov bh,0
    add bx,bx
    
    jmp word ptr table[bx];根据ah的值来调用相应的子程序

;把字符压入    
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],20h ;如果top的值是0 ,就说明还没有字符串
    jmp sret
    
noempty:
    mov al,[si][bx]
    mov es:[di],al
    mov byte ptr es:[di+2],20h 
    mov byte ptr es:[di+1],1h;显示字体的颜色
    inc bx
    add di,2
    jmp charshows
        
sret:
    pop es
    pop di
    pop dx
    pop bx
    ret
    
    
codesg ends
end start
评论次数(1)  |  浏览次数(725)  |  类型(汇编作业) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码