中断的检测
中断的检测有专门的硬件电路,内部中断的中断类型号由CPU产生,CPU能够直接识别。外部中断的中断类型号需要从外设读取。另外,内部中断的优先级都高于外部中断(除了单步中断),内部中断不可用软件方法屏蔽(单步中断除外)。
中断处理过程
中断的处理过程有以下几步构成:
- 关中断。CPU关闭中断,即不再接受其他外部中断请求。
- 保存断点。将发生中断处的指令地址压入堆栈,以使中断处理完后能正确的返回(注意,有可能保存中断处的指令地址,也有可能是中断处的指令的下一条指令的地址,具体情况视中断的类型)。
- 识别中断源。CPU识别中断的来源,确定中断类型号,从而找到相应的中断处理程序的入口地址
- (以上三步一般由处理中断的硬件电路完成)保存现场。将发生中断处的有关寄存器(中断服务程序要使用的寄存器)以及标志寄存器的内容压入堆栈。
- 执行中断服务程序。转到中断服务程序入口开始执行,可在适时时刻重新开放中断,以便允许响应较高优先级的外部中断。
- (后三步一般软件,即中断处理程序完成)恢复现场并返回。把“保护现场”时压入堆栈的信息弹回寄存器,然后执行中断返回指令,从而返回主程序继续运行。(IRET指令,无操作数,从栈顶弹出3个字,分别送入IP、CS和FLAGS寄存器)
软件开放和关闭中断的方法
标志寄存器中,有两类标志:
- 状态标志。由硬件设置,由软件读取。
- 控制标志。由软件设置,硬件根据设置执行不同的功能。

中断标志IF(Interrupt Flag):
- 控制对可屏蔽中断的响应,若IF=0,则允许CPU响应可屏蔽中断请求。若IF=1,则不允许CPU响应可屏蔽中断请求。
- 可以用指令设置IF标志位,例如STL,中断标志置1。CLT,中断标志清0。
- IF对非屏蔽中断和内部中断不起作用。
中断处理过程图解
