目录:https://blog.csdn.net/qq_43098197/article/details/124532401
接口芯片和端口
CPU 通过端口和外部设备进行联系。
外中断信息
外设产生输入时,相关芯片将向 CPU 发出相应的中断信息。
可屏蔽中断
-
可屏蔽中断是 CPU 可以不响应的外中断。
-
IF=1,则响应,否则不响应。
-
外中断的中断类型码通过数据总线送入 CPU。
内中断则是在 CPU 内部产生。
不可屏蔽中断
- CPU 必须响应的外中断。
- 中断类型码固定为 2,因此中断过程中,不需要取中断类型码。
- 不可屏蔽中断是在系统中有必须处理的紧急情况发生时用来通知 CPU 的中断信息。
- 中断过程:
- 标志寄存器入栈
- IF=0,TF=0
- CS、IP 入栈
- (IP)=(8),(CS)=(0AH)
设置 IF 位
sti
,设置 IF=1cli
,设置 IF=0
PC 机键盘的处理过程
键盘输入
按下一个键时,产生了一个扫描码,扫描码说明了按下的键在键盘上的位置。
松开一个键时,也同理。
通码:按下(第 7 位为 0)。
断码:松开(第 7 位为 1)。
扫描码长度为一个字节
断码 = 通码 + 80H
引发 9 号中断
键盘的输入到达 60H 端口时,相关的芯片就会向 CPU 发出中断类型码为 9 的可屏蔽中断信息。
执行 int 9 中断例程
由 BIOS 提供 int 9 中断例程,用来进行基本的键盘输入处理:
-
读取 60H 端口中的扫描码。
-
若是字符键的扫描码,将该扫描码和它所对应的 ASCII码 送入内容中的 BIOS 键盘缓冲区。若是控制键和切换键的扫描码,则将其转为状态字节写入内存中存储状态字节的单元。
控制键:Crtl 等…
切换键:CapsLock 等…
状态字节:用二进制位记录控制键和切换键开关状态的字节 -
对键盘系统进行相关控制,例如向相关芯片发出应答信息。
BIOS 键盘缓冲区:
- 用于存放 int 9 中断例程所接收的键盘输入的内存区。
- 可存储 15 个键盘输入,因为 int 9 中断例程除了接收扫描码外,还要产生和扫描码对应的字符码。
- 一个键盘输入用一个字单元存放,高位扫描码,低位字符码。
0040:17
单元:
-
存储键盘状态字节。
-
该字节记录控制键和切换键的状态。
-
键盘状态字节记录个位记录的信息如下:
int 9 中断例程入口地址更改后,需要还原回去
若 int 9 中断例程入口地址更改后,需要还原回去,否则程序返回后,别的程序将无法使用键盘。
更改后,需要还原回去,否则程序返回后,别的程序将无法使用键盘。