?? p298.asm
字號:
;最基本的字符串輸入程序,需要具備下面的功能:
;(1) 在輸入的同時(shí)需要顯示這個(gè)字符串;
;(2)一般在輸入回車符后,字符串輸入結(jié)束;
;(3)能夠刪除已經(jīng)輸入的字符。
;編寫一個(gè)接收字符串的輸入子程序,實(shí)現(xiàn)上面三個(gè)基本功能。
;因?yàn)樵谳斎氲倪^程中需要顯示,子程序的參數(shù)如下:
; (dh)、(dl)=字符串在屏幕上顯示的行、列位置;
; ds:si 指向字符串的存儲空間,字符串以O(shè) 為結(jié)尾符。
assume cs:code
code segment
start:
call getstr
return: mov ax,4c00h
int 21h
;完整的接收字符串輸入的子程序
getstr: push ax
getstrs:mov ah,0
int 16h
cmp al,20h
jb nochar ;判斷的是ASCII碼小于0,說明不是字符
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
;功能子程序?qū)崿F(xiàn)
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: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
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -