说明:下文为转载的,下文中的“扩展码”其实就是“扫描码(scan code)”的意思
键盘扫描码:是每个键盘生产厂家为自己所生产的键盘设置的扫面方式,目的检测是那个键被按下。扫描码 是键盘对应按键的编码 (有关扫描码,具体可参考它)
键盘I/O中断调用有三个功能,功能号为0, 1, 2,且必须把功能号放在AH中。
(1)0号功能调用 格式:MOV AH, 0
INT 16H
功能:从键盘读入字符送AL寄存器。执行时,等待键盘输入,一旦输入,字符的ASCII码放入AL中。若AL=0,则AH为输入的扩展码。
(esc键的ascii码十进制表示为27,二进制表示为0001 1011,十六进制表示为1B) cmp al,1bh ;可以判断刚才输入的字符是否是escape
(2)1号功能调用
格式:MOV AH, 01H
INT 16H
功能:用来查询键盘缓冲区,对键盘扫描但不等待,并设置ZF标志。若有按键操作(即键盘缓冲区不空),则ZF=0,AL中存放的是输入的ASCII码,AH中存放输入字符的扩展码。若无键按下,则标志位ZF=1。
(3)2号功能调用
格式: MOV AH, 02H
INT 16H
功能:检查键盘上各特殊功能键的状态。执行后,各种特殊功能键的状态放入AL寄存器中,
这个状态字记录在内存0040H:0017H单元中,若对应位为“1”,表示该键状态为“ON”,处于按下状态;若对应位为“0”,表示该键状态为“OFF”,处于断开状态。
【例4.46】
MOV AH, 02H
INT 16H ; 取键盘状态到AL中
AND AL, 0000 0100B ; 检查Ctrl键是否按下
JNZ CTRL-ON
CTRL-ON: …
检查Ctrl键是否按下,若按下,则控制转移到某个程序段执行
下面这个可能更加清楚一点儿(来源:https://bbs.csdn.net/topics/320108074?lis):
00H、10H —从键盘读入字符03H —设置重复率
01H、11H —读取键盘状态04H —设置键盘点击
02H, 12H —读取键盘标志05H —字符及其扫描码进栈
(1)、功能00H和10H
功能描述:从键盘读入字符
入口参数:
AH=00H——读键盘
=10H——读扩展键盘,可根据0000:0496H单元的内容判断:扩展键盘是否有效
出口参数:AH=键盘的扫描码
AL=字符的ASCII码
(2)、功能01H和11H
功能描述:读取键盘状态
入口参数:AH=01H——检查普通键盘
=11H——检查扩展键盘
出口参数:ZF=1——无字符输入,否则,AH=键盘的扫描码,AL=ASCII码。
(3)、功能02H和12H
功能描述:读取键盘标志
入口参数:AH=02H——普通键盘的移位标志
=12H——扩展键盘的移位标志
出口参数:AL=键盘标志(02H和12H都有效),其各位之值为1时的含义如下: 位7—INS开状态位3—ALT键按下
位6—CAPS LOCK开状态位2—CTRL键按下
位5—NUM LOCK开状态位1—左SHIFT键按下
位4—SCROLL LOCK开状态位0—右SHIFT键按下
AH=扩展键盘的标志(12H有效),其各位之值为1时的含义如下:
位7—SysReq键按下位3—右ALT键按下
位6—CAPS LOCK键按下位2—右CTRL键按下
位5—NUM LOCK键按下位1—左ALT键按下
位4—SCROLL键按下位0—左CTRL键按下
(4)、功能03H
功能描述:设置重复率
入口参数:AH=03H 对于PC/AT和PS/2:AL=05H
BH=重复延迟
BL=重复率
对于PCjr:AL=00H——装入缺省的速率和延迟
=01H——增加初始延迟
=02H——重复频率降低一半
=03H——增加延迟和降低一半重复频率
=04H——关闭键盘重复功能
出口参数:无
(5)、功能04H
功能描述:设置键盘点击
入口参数:AH=04H AL=00H——关闭键盘点击功能
=01H——打开键盘点击功能
出口参数:无
(下面来源:http://blog.sina.com.cn/s/blog_658c0c230100mxl0.html)
D7
|
D6
|
D5
|
D4
|
D3
|
D2
|
D1
|
D0
|
忙
|
确认
|
有纸
|
联机
|
错误
|
\
|
\
|
超时
|
D7
|
D6
|
D5
|
D4
|
D3
|
D2
|
D1
|
D0
|
Ins
|
CapsLock
|
NumLock
|
ScrollLock
|
Alt
|
Ctrl
|
左Shift
|
右Shift
|
AH=1:设置当前时钟值。