汇编语言王爽第四版17.3节完整程序,可调试,可运行。
最基本的字符串输入程序,具备以下功能:
1、在输入的同时需要显示这个字符串;
2、输入回车符后,一个字符串的输入结束;
3、能够删除已经输入的字符。
完整程序代码如下,可运行,可调试:
assume cs:code,ds:data
data segment
keys db 256 dup(0)
data ends
code segment
start:
mov ax,data
mov ds,ax
mov dh,10
s:
mov si,offset keys
mov di,si
mov dl,12
call getStr
inc dh
cmp byte ptr [di],'q'
jne s
cmp byte ptr [di+1],0
je exit
jmp s
exit:
mov ax,4c00h
int 21h
getStr:
push ax
getStrLoop:
mov ah,0
int 16h
cmp al,20h
jb getStrCtrl
mov ah,0
call charStack
mov ah,2
call charStack
jmp getStrLoop
getStrCtrl:
cmp ah,0eh
je getStrBack
cmp ah,1ch
je getStrEnter
jmp getStrLoop
getStrBack:
mov ah,1
call charStack
mov ah,2
call charStack
jmp getStrLoop
getStrEnter:
mov al,0
mov ah,0
call charStack
mov ah,2
call charStack
mov ah,3
call charStack
pop ax
ret
charStack:
; 功能:字符栈的入栈、出栈和显示
; 参数:(ah)=功能号,0表示入栈,1表示出栈,2表示显示, 3表示初始化
; ds:si指向字符栈空间
; 对于0号功能:(al)=入栈字符
; 对于1号功能:(al)=返回的字符
; 对于2号功能:(dh)、(dl)=字符串在屏幕上显示的行、列位置。
jmp short charStart
table dw charPush, charPop, charShow, charInit
top dw 0 ;栈顶
charStart:
push bx
push dx
push di
push es
cmp ah,3
ja charRet
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 charRet
charPop:
cmp top,0
jbe charRet
dec top
mov bx,top
mov al,[si][bx]
jmp charRet
charShow:
mov bx,0b800h
mov es,bx
mov al,160
mul dh
mov di,ax
add dl,dl
mov dh,0
add di,dx
mov bx,0
charLoop:
cmp bx,top
jne charNext
mov byte ptr es:[di],' '
jmp charRet
charNext:
mov al,[si][bx]
mov es:[di],al
mov byte ptr es:[di+1],2
mov byte ptr es:[di+2],' '
inc bx
add di,2
jmp charLoop
charInit:
mov top,0
charRet:
pop es
pop di
pop dx
pop bx
ret
code ends
end start
编译、运行:
C:\>masm pg02;
C:\>link pg02;
C:\>pg02
C:\>
界面操作:
1、输入的字符串将在屏幕10行12列位置显示;
2、可以用退格键删除末尾的字符;
3、回车键结束当前字符串;
4、从下一行开始进行下一个字符串的输入;
5、输入:q<CR>,即字符'q'+回车键,就可以退出程序。
运行效果如下图所示
(全文完)