汇编语言字符串的输入程序2000字符

简要说明

  1. 可以输入满屏字符
  2. 输满后截止字符输入,按backspace键正常删除字符
  3. 所有情况下enter键结束

源程序

;最基本的字符串输入程序,需要具备下面的功能:
;(1) 在输入的同时需要显示这个字符串;
;(2)一般在输入回车符后,字符串输入结束;
;(3)能够删除已经输入的字符。

;编写一个接收字符串的输入子程序,实现上面三个基本功能。
;因为在输入的过程中需要显示,子程序的参数如下:
; (dh)(dl)=字符串在屏幕上显示的行、列位置;
; ds:si 指向字符串的存储空间,字符串以O 为结尾符。

assume cs:code,ds:data

data segment
 db 2000 dup (0)  ;定义字符串存储空间——字符栈,最多存储2000个字符
 db 0,0    ;预留空间
data ends

code segment
start: mov dx,0  ;显示位置为0行0列
  mov ax,data
  mov ds,ax
  mov si,0  ;设置ds:si指向字符栈
 call getstr

return: mov ax,4c00h
 int 21h

;完整的接收字符串输入的子程序

getstr: push ax 

getstrs:mov ah,0
 int 16h

 cmp al,20h
 jb nochar     ;判断的是ASCII码小于20h,说明不是字符
 mov ah,0;
 call charstack  ;字符入栈
 mov ah,2
 call charstack  ;显示栈中的字符
 jmp getstrs

nochar: cmp ah,0eh  ;退格键的扫描码
 je backspace
 cmp ah,1ch   ;回车键的扫描码
 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   ;0入栈
 mov ah,2
 call charstack  ;显示栈中的字符

 pop ax
 ret ;getstr ends

;功能子程序实现

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:cmp top,2000
 je sret   ;栈满不再入栈
 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值