|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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
复制代码
|
|