目录 上一页 下一页 下一章

第6章 文字输出与键盘输入 -159-

6.5 键盘输入
  我们早已研究了如何通过21H或16H中断调用来取得按键的信息,但我们对这些信息究竟是如何产生的还一无所知,这一节我们就要更细致地讨论这个问题。那么首先我们把上一节留下的问题解决掉。
  我们在前面编制过一个"TESTKEY"程序,下面这个程序是"TESTKEY"的一个升级版本:
TESTKEY2
ESC_KEY
code


main

ascii
continue:


waitkey:







main

out_ax



outloop:





.ASM
equ
segment
assume
org
proc
jmp
db

push
pop

mov
int
call
cmp
jnz
mov
int
endp

proc
push
mov
mov

rol
mov
and
xlat
mov

01h

cs:code
100h
far
continue
'0123456789ABCDEF'

cs
ds

ah,0
16h
out_ax
ah,ESC_KEY
waitkey
ah,4ch
21h


near
ax
bx,offset ascii
cx,0404h

ax,cl
dx,ax
ax,000fh
ascii
ah,0eh

;一个与ESC键有关的常量




;跳过数据区
;十六进制数对应的ASCII码

;通过堆栈将CS寄存器送入DS寄存器


;等待键盘输入

;调用OUT_AX子过程输出AX寄存器的值
;输入的是ESC键吗?
;不是ESC键则转WAITKEY继续
;结束程序



;OUT_AX子过程
;暂存AX寄存器
;BX寄存器指向ASCII表
;设置循环计数与移位计数

;将AX寄存器的高4位移至低4位
;用DX寄存器暂存移位后的结果
;保留AX低4位(实际是移位前的高4位)
;取得对应的ASCII码
;利用10H中断的0EH功能

Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章