第十五章 外中断
-
及时处理外设的输入,有以下两个问题
- 外设的输入随时可能发生,CPU如何得知?
- CPU从何处得到外设的输入?
这一章,以键盘输入为例,探讨这个问题。
15.1 接口芯片和端口
外设的输入不直接送入内存和CPU,而是送入相关的接口芯片的端口中。CPU向外设输出,也是要先送入端口,由相关芯片到外设。
CPU通过端口和外部设备进行联系
15.2 外中断信息
外中断信息,来自于CPU外部,当CPU外部有需要处理的事情发生的时候,比如,外部的输入到达,相关芯片将向CPU发出相应的中断信息。CPU在执行完当前指令后,可以检测到发送过来的中断信息,引发中断。
-
可屏蔽中断
- 可屏蔽中断是CPU可以不响应的外中断
- 如果
IF=1
则响应,IF=0
则不响应 -
sti
使得IF=1
,cli
设置IF=0
-
不可屏蔽中断
- 中断类型码固定为
2
- 标志寄存器入栈,IF=0,TF=0
- CS,IP入栈
-(IP)
=(08H),(CS)
=(0AH)
- 中断类型码固定为
几乎所有外中断都是可屏蔽中断。
15.3 PC机键盘的处理过程
-
键盘输入
- 按下,和松开生成的扫描码都会送入
60h
端口 - 按下的扫描码称为通码,松开的扫描码称位断码
-
断码=通码+80H
,通码
第7位为0,断码
第7位为1.(从0开始数)
- 按下,和松开生成的扫描码都会送入
-
引发 9 号中断
- 到达
60h
端口,相关芯片就会向CPU发送中断类型码为9
的可屏蔽中断信息 - 如果
IF
=1,执行中断。
- 到达
-
执行 int 9 中断例程
- 读出60H端口中的扫描码
- 如果是字符集扫描码,将该扫描码和所对应的字符码(即ASCII)送入内存中的BIOS键盘缓冲区。
- 如果是控制键(比如
Ctrl
)的扫描码,则转变位状态字节(用二进制位记录控制键和切换键状态的字节)写入内存中存储状态字节的单元 - 对键盘系统进行相关的控制,比如说,向相关芯片发出应答信息。
键盘缓冲区
该内存去可以存储15个键盘输入,用一个字单元存放,高位字节放扫描码,低位字节放字符码
0040:17
单元存储状态字节