马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
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[bx];调用对应的功能
;入栈
charpush:
MOV bx,top ;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
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
|