xiaosawanjava 发表于 2014-6-10 11:05:27

字符输入删除和显示。

assume CS:code

code segment
start:
CALL getstr

MOV AX,4c00h
INT 21h


charstack:
JMP short charstart
table DW charpush,charpop,charshow    ;定义3个方法
top DW 0

charstart:
PUSH bx
PUSH DX
PUSH DI
PUSH ES

CMP AH,2                ;如果大于 2 就结束,没有这个功能
JA sret

MOV BL,AH             ;功能号 加上本身 得到偏移
MOV BH,0
ADD bx,bx
JMP WORD ptr table;调用对应的功能

;入栈
charpush:
MOV bx,top         ;top代表栈顶
MOV,AL
INC top
JMP sret

;出栈
charpop:
CMP top,0
JE sret
DEC top
MOV bx,top
MOV AL,
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:,' '
JMP sret

noempty:
MOV AL,
MOV ES:,AL
MOV BYTE ptr ES:,' '
INC bx
ADD DI,2
JMP charshows

sret:
POP ES
POP DI
POP DX
POP bx
RET


getstr:
PUSH AX

getstrs:
MOV AH,0
INT 16h

CMP AL,20h    ;小于20的都不是字符
JB nochar

MOV AH,0      ;字符入栈
CALL charstack

MOV AH,2      ;显示字符
CALL charstack

JMP getstrs

nochar:
CMP AH,0eh   ;表示按下的是退格键
JE backspace

CMP AH,1ch
JE ENTER1
JMP getstrs

backspace:   ;删除一个,在显示
MOV AH,1   
CALL charstack
MOV AH,2
CALL charstack
JMP getstrs

ENTER1:      ;如果是回车键,al给0 写入到字符栈里面
   MOV AL,0
   MOV AH,0
   CALL charstack
   MOV AH,2
   CALL charstack
   POP AX
   RET   

code ends
end

页: [1]
查看完整版本: 字符输入删除和显示。