中断由异步的外部事件引起。外部事件及
中断响应与正在执行的指令不存在关系。80386有两根引脚INTR和NMI接受外部
中断请求信号,INTR接受可屏蔽中断请求。在80386中,
标志寄存器EFLAGS中的IF标志决定是否屏蔽可屏蔽中断请求。
处理器必须接受和处理来自NMI的
中断请求。在80386系统中,处理器在响应NMI的
中断向量号固定为2。为了避免不可屏蔽中断的嵌套,当接受到一个NMI中断请求时,处理器自动屏蔽所有的NMI的中断请求,直到执行
中断指令IRET后才重新开放NMI中断请求,所以,NMI处理程序应以IRET指令结束。
按照是否可以被屏蔽,可将中断分为两大类:不可屏蔽中断(又叫非屏蔽中断)和可屏蔽中断。不可屏蔽中断源一旦提出请求,CPU 必须无条件响应;而对可屏蔽中断源的请求,CPU 可以响应,也可以不响应。CPU 一般设置两根中断请求输入线:可屏蔽中断请求 INTR(Interrupt Require)和不可屏蔽中断请求 NMI(NonMaskable Interrupt)。对于可屏蔽中断,除了受本身的屏蔽位控制外,还都要受一个总的控制,即 CPU 标志寄存器中的中断允许标志位 IF(Interrupt Flag)的控制。IF 位为 1,可以得到 CPU 的响应;否则,得不到响应。IF 位可以由用户控制,指令 STI 或 Turbo c 的 Enable () 函数,将 IF 位置 1(开中断);指令 CLI 或 Turbo_c 的 Disable () 函数,将 IF 位清 0(关中断)。
典型的非屏蔽
中断源的例子是电源掉电,一旦出现,必须立即无条件地响应,否则进行其他任何工作都是没有意义的。
典型的
可屏蔽中断源的例子是打印机中断,CPU对打印机
中断请求的响应可以快一些,也可以慢一些,因为让打印机等待会儿是完全可以的。