漫谈计算机之中断的处理过程

5,802 阅读2分钟

中断的检测

中断的检测有专门的硬件电路,内部中断的中断类型号由CPU产生,CPU能够直接识别。外部中断的中断类型号需要从外设读取。另外,内部中断的优先级都高于外部中断(除了单步中断),内部中断不可用软件方法屏蔽(单步中断除外)。

中断处理过程

中断的处理过程有以下几步构成:

  1. 关中断。CPU关闭中断,即不再接受其他外部中断请求。
  2. 保存断点。将发生中断处的指令地址压入堆栈,以使中断处理完后能正确的返回(注意,有可能保存中断处的指令地址,也有可能是中断处的指令的下一条指令的地址,具体情况视中断的类型)。
  3. 识别中断源。CPU识别中断的来源,确定中断类型号,从而找到相应的中断处理程序的入口地址
  4. (以上三步一般由处理中断的硬件电路完成)保存现场。将发生中断处的有关寄存器(中断服务程序要使用的寄存器)以及标志寄存器的内容压入堆栈。
  5. 执行中断服务程序。转到中断服务程序入口开始执行,可在适时时刻重新开放中断,以便允许响应较高优先级的外部中断。
  6. (后三步一般软件,即中断处理程序完成)恢复现场并返回。把“保护现场”时压入堆栈的信息弹回寄存器,然后执行中断返回指令,从而返回主程序继续运行。(IRET指令,无操作数,从栈顶弹出3个字,分别送入IP、CS和FLAGS寄存器)

软件开放和关闭中断的方法

标志寄存器中,有两类标志:

  1. 状态标志。由硬件设置,由软件读取。
  2. 控制标志。由软件设置,硬件根据设置执行不同的功能。

image

中断标志IF(Interrupt Flag):

  • 控制对可屏蔽中断的响应,若IF=0,则允许CPU响应可屏蔽中断请求。若IF=1,则不允许CPU响应可屏蔽中断请求。
  • 可以用指令设置IF标志位,例如STL,中断标志置1。CLT,中断标志清0。
  • IF对非屏蔽中断和内部中断不起作用。

中断处理过程图解

image