3、键盘中断的处理过程

当用户按键时,键盘接口会得到一个代表该按键的键盘扫描码,同时产生一个中断请求。键盘中断服务程序先从键盘接口取得按键的扫描码,然后根据其扫描码判断用户所按的键并作相应的处理,最后通知中断控制器本次中断结束并实现中断返回。

若用户按下双态键(如:Caps Lock、Num Lock和Scroll Lock等),则在键盘上相应LED指示灯的状态将发生改变;
若用户按下控制键(如:Ctrl、Alt和Shift等),则在键盘标志字中设置其标志位;
若用户按下功能键(如:F1、F2、…等),再根据当前是否又按下控制键来确定其系统扫描码,并把其系统扫描码和一个值为0的字节存入键盘缓冲区;
若用户按下字符键(如:A、1、+、…等),此时,再根据当前是否又按下控制键来确定其系统扫描码,并得到该按键所对应的ASCII码,然后把其系统扫描码和ASCII码一起存入键盘缓冲区;
若用户按下功能请求键(如:Print Screen等),则系统直接产生一个具体的动作。

有关键盘中各种单键、组合键的扫描码及其相应的ASCII码,请参阅本书的附录5

4、DOS功能中的键盘输入

键盘输入是一种最常用的输入方式,所以,在DOS操作系统中,提供了能实现各种键盘输入的功能(Windows操作系统中仍然能用)。INT 21H中的相关功能如下:

01H——带回显的键盘输入 06H——控制台的输入/输出:当DL=0FFH,表示键盘输入
07H——不回显、不过滤的键盘输入 08H——不回显的键盘输入
0AH——键盘输入字符串 0BH——检查键盘输入状态
0CH——清除输入缓冲区的输入功能

有关中断功能的详细描述和调用参数在此从略,需要查阅者可参阅附录3之字符功能调用类

5、BIOS中的键盘输入

在BIOS系统中,提供了中断16H来实现键盘输入功能。其具体的功能如下:

00H、10H——从键盘读一个字符,输入字符不回显
01H、11H——判断键盘缓冲区内是否有字符可读
02H——读取当前键盘状态字

有关中断功能的详细描述和调用参数在此从略,需要查阅者可参阅附录3之键盘服务

6、直接操作端口的键盘输入

表8.1可知:键盘输入端口的地址为60H,所以,我们可以用指令IN从该端口读取当前按键的扫描码。

例如:

MOV DX, 60H
IN   AL, DX