一、键盘输入
1、键盘上的每一个键就相当于一个开关,键盘中有一个芯片对键盘上的每一个键的开关状态进行扫描。
1)按下一个键时,开关接通,该芯片就产生一个扫描码(通码)
该扫描码说明了按下的键在键盘上的位置。
扫描码被送入主板上的相关接口芯片的寄存器中,该寄存器的端口地址为60h。
2)松开按下的键时,也产生一个扫描码(断码)
该扫描码说明了松开的键在键盘上的位置。
松开时产生的扫描码也被送入 60h端口 中。
2、扫描码长度为一个字节(16位),通码的第7位为0,断码的地7位为1。
即:断码=通码+80h(80h相当于二进制1000 0000)
二、引发9号中断
键盘的输入到达 60h端口 时,相关的芯片就会向CPU发出中断类型码为 9 的可屏蔽中断信息。
CPU检测到该中断信息后,如果IF=1,则响应中断,引发中断过程,转去执行int 9中断例程。
三、执行int 9中断例程
BIOS提供了int 9中断例程,用来进行基本的键盘输入处理:
1)读出 60h端口 中的扫描码;
2)如果是字符键的扫描码,将该扫描码和其对应的字符码(即 ASCII码)送入内存中的BIOS键盘缓冲区; 如果是控制键(如:Ctrl)和切换键(如:CapsLock)的扫描码,则将其转变为状态字节(用二进制位记录控制键和切换键状态的字节)写入内存中存储状态字节单元。
3)对键盘系统进行相关的控制,比如说,向相关芯片发出应答信息。
BIOS键盘缓冲区是系统启动后,BIOS用于存放int 9中断例程所接收的键盘输入的内存区。
---该内存区可以存储15个键盘输入,因为int 9中断例程除了接收扫描码外,还要产生和扫描码对应的字符码,所以在BIOS键盘缓冲区中,一个键盘输入用一个字单元存放,高位字节存放扫描码,低位字节存放字符码。
概括总结
1)键盘产生扫描码;
2)扫描码送入60h端口;
3)一旦侦测到60h端口有动静,引发9号中断;
4)CPU执行int 9中断例程处理键盘输入。
以上前三步都是由硬件系统自动完成。
我们能改变的只有第四步,修改int 9终端程序。
阅读(4316) | 评论(0) | 转发(0) |