汇编语言-15外中断

## 外中断
CPU在计算机系统中,除了能够执行指令,进行运算以外,还应该能够对外部设备进行控制,接收它们的输入,向它们进行输出。也就是说,CPU除了有运算能力外,还要有I/0(Input/Output,输入/输出)能力。比如,按下键盘上的一个键,CPU最终要能够处理这个键。在使用文本编辑器时,按下a键后,可以看到屏幕上出现“a”‘是CPU将从键盘上输入的键所对应的字符送到显示器上的。

## 接口芯片和端口
PC系统的接口卡和主板上,装有各种接口芯片。这些外设接口芯片的内部有若干寄存器,CPU将这些寄存器当作端口来访问。
外设的输入不直接送入内存和CPU,而是送入相关的接口芯片的端口中;CPU向外设的输出也不是直接送入外设,而是先送入端口中,再由相关的芯片送到外设。CPU还可以向外设输出控制命令,而这些控制命令也是先送到相关芯片的端口中,然后再由相关的芯片根据命令对外设实施控制。
可见,CPU通过端口和外部设备进行联系。

## 外中断信息
当CPU外部有需要处理的事情发生的时候,比如说,外设的输入到达,相关芯片将向CPU发出相应的中断信息。CPU在执行完当前指令后,可以检测到发送过来的中断信息,引发中断过程,处理外设的输入。

在PC 系统中,外中断源一共有以下两类:
### 1. 可屏蔽中断
可屏蔽中断是CPU可以不响应的外中断。CPU是否响应可屏蔽中断,要看标志寄存器的IF位的设置。当CPU检测到可屏蔽中断信息时,如果IF=l,,则CPU在执行完当前指令后响应中断,引发中断过程;如果IF=0,则不响应可屏蔽中断。
![](https://img2020.cnblogs.com/blog/1208477/202007/1208477-20200714082006601-214202247.png)

### 2. 不可屏蔽中断
不可屏蔽中断是CPU必须响应的外中断。当CPU检测到不可屏蔽中断信息时,则在执行完当前指令后,立即响应,引发中断过程。
不可屏蔽中断的中断类型码固定为2,所以中断过程中,不需要取中断类型码。则不可屏蔽中断的中断过程为:
(1) 标志寄存器入栈,IF=O,TF=O:
(2) cs、IP 入栈;
(3) (IP)=(8),(CS)=(OAH) 。
几乎所有由外设引发的外中断,都是可屏蔽中断。当外设有需要处理的事件(比如说键盘输入)发生时,相关芯片向CPU发出可屏蔽中断信息。不可屏蔽中断是在系统中有必须处理的紧急情况发生时用来通知CPU的中断信息。

## PC机键盘的处理过程
### 键盘输入
键盘上的每一个键相当于一个开关,键盘中有一个芯片对键盘上的每一个键的开关状态进行扫描。
按下一个键时,开关接通,该芯片就产生一个扫描码,扫描码说明了按下的键在键盘上的位置。扫描码被送入主板上的相关接口芯片的寄存器中,该寄存器的端口地址为60h。
松开按下的键时,也产生一个扫描码,扫描码说明了松开的键在键盘上的位置。松开按键时产生的扫描码也被送入60h端口中。
一般将按下一个键时产生的扫描码称为通码,松开一个键产生的扫描码称为断码。扫
描码长度为一个字节,通码的第7位为0,断码的第7位为1,即:
断码=通码+80h
比如,g键的通码为22h,断码为a2h。
![](https://img2020.cnblogs.com/blog/1208477/202007/1208477-20200714082954409-1017429178.png)
![](https://img2020.cnblogs.com/blog/1208477/202007/1208477-20200714083007355-1071023312.png)

### 引发9号中断
键盘的输入到达60h端口时,相关的芯片就会向CPU发出中断类型码为9的可屏蔽中断信息。CPU检测到该中断信息后,如果IF=1,则响应中断,引发中断过程,转去执行int9中断例程。

### 执行int 9中断例程
![](https://img2020.cnblogs.com/blog/1208477/202007/1208477-20200714083139682-1287141444.png)

### 编写int 9 中断例程
1.键盘产生扫描码;2.扫描码送入60h端口;3.引发9号中断;4.CPU执行int 9中断例程处理键盘输入。
第1 、2 、3步都是由硬件系统完成的。能够改变的只有int 9中断处理程序。

点赞

Leave a Reply

Your email address will not be published. Required fields are marked *