Chinaunix首页 | 论坛 | 博客
  • 博客访问: 787410
  • 博文数量: 104
  • 博客积分: 915
  • 博客等级: 下士
  • 技术积分: 2171
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-24 21:34
文章分类

全部博文(104)

文章存档

2018年(4)

2015年(14)

2014年(9)

2013年(56)

2012年(21)

分类: LINUX

2012-10-22 08:09:04

一、键盘输入
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终端程序。
阅读(4268) | 评论(0) | 转发(0) |
0

上一篇:进程笔记(1)

下一篇:汇编小记

给主人留下些什么吧!~~