外部中断事件

外部中断事件

众所周知,CPU在计算机系统中,除了能够执行指令,进行运算外,还应该有输入输出功能。比如说,我现在在打字输入‘a’,CPU他会处理这个按键,并在你的屏幕上显示‘a’。我们想想,它能显示,是不是打印机工作了,打印机工作。是不是CPU给它指令了,那是不是我们按键,然后CPU处理并执行。

        那么,CPU现在要处理键盘(也就是外设的输入),很明显要解决两个问题。

  1. 我们是不是随时按按键他都能执行,那么CPU如何得知。
  2. CPU如何得到外设的输入,以及他如何区别键盘输入的内容。

接口和端口

        CPU和外设的联系是通过端口实现并控制外设的输入和输出。外设的输入不直接送入内存和CPU,而是先送到相应接口芯片的端口中:输出也是如此。CPU向外设输出控制指令也是如此。

中断信息

        我们现在知道了,外设的输入是存放在端口中,但是它随时都有可能发生,那么CPU如何及时的知道。也就是我们提出的第一个问题。这时,CPU提供中断机制来满足这种需求。 当CPU内部需要有处理的事情发生的时候,将产生终端信息,引发中断过程,中断过程此处不多讲。这种中断信息被称为内部中断。

        还有一种中断信息,来自于CPU外部,比如说外设的输入到达。CPU在执行完当前指令的时候,会读取中断控制器信息,引发中断过程,处理外设输入

PC系统中外中断过程(可屏蔽):

  1. 取中断类型码;
  2. 标志寄存器入栈,IF = 0,TF = 0;
  3. CS,IP入栈;
  4. 得到中断服务程序的入口地址(IP) = (n*4),(cs) = (n*4+2)
  5. 处理中断服务程序

PC系统中外中断过程(不可屏蔽):中断类型码固定为2,所以在中断过程中不需要取中断类型码

  1. 标志寄存器入栈,IF = 0,TF = 0;
  2. CS,IP入栈
  3. (IP) = (8),(CS) = (0AH)。

这里主要举个键盘的外部中断例子

键盘事件:int 09h中断

     当键盘输入到端口地址60h,相关控制芯片会向CPU发出中断类型号为9的可屏蔽外部中断信息,如果此时IF(中断屏蔽标志位)为1则执行相应的中断处理。处理如下

  1. 读出60h端口中的扫描码
  2. 将扫描码和字符码送入BIOS键盘缓冲区;如果是控制键他会将其转换成状态字节(二进制)送入存储键盘状态的单元(0040:17);
  3. 对键盘系统发出相关的控制。

编写int 9 中断例程 :

猜你喜欢

转载自blog.csdn.net/weixin_42149196/article/details/83991273