键盘I/O中断调用(INT 16H)和常见的int 17H、int 1A H

说明:下文为转载的,下文中的“扩展码”其实就是“扫描码(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):

键盘服务(Keyboard Service——INT 16H)

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)

BIOS中断 INT 17H, INT 16H ,INT 1AH

1、INT 17H(打印机I/O调用)
  INT 17H中断处理程序有三个功能:
  当AH=0时,把AL中的字符在打印机上打印出来。
  当AH=1时,把AL中的初始化控制命令送给打印机。
  当AH=2时,把打印机的状态读至AL寄存器。
D7
D6
D5
D4
D3
D2
D1
D0
确认
有纸
联机
错误
\
\
超时
  寄存器AH中的值决定一个中断处理程序的功能,称其为"功能号"。当AH=0时调用INT 17H中断,称为"INT 17H的0号功能",可以简记为"INT 17H/0"
2、INT 16H(键盘I/O中断)
  AH=0:从键盘读入ASCII字符,放在AL中。
  AH=1:测试有无键被按下。ZF=0,表示按过任意键,并在AL中获得该键的ASCII码。ZF=1,未按过键。
  AH=2:读取特殊功能键的状态至AL中。
D7
D6
D5
D4
D3
D2
D1
D0
Ins
CapsLock
NumLock
ScrollLock
Alt
Ctrl
左Shift
右Shift

3、 INT 1AH (BIOS日期、时间中断)
  AH=0:读当前时钟值到CX、DX中。CX为高位,DX为低位。时钟单位是54.9ms(1/18.2秒)(65536000/1193180)。

AH=1:设置当前时钟值。

 

发布了149 篇原创文章 · 获赞 22 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/deniece1/article/details/103447413
h'h