7.5.1 分类
1. 中断
由外部事件引起的中断称为外部中断。这里有我们熟悉的可屏蔽中断 INTR和非屏蔽中断NMI。
2. 异常
如上所述,在8088中的内部中断,如除法、单步、溢出、软件中断(INTn),均被列入异常中。有人也将它们称之为陷阱。
7.5.2 中断或异常的响应过程
1.优先级 前面已经提到80386之后的处理器有许多中断和异常发生,它们的优先级如表7.4所示。 2.实地址模式下的响应过程 (1) 获得向量码 (2) 进行断点保护 (3) 获得查表值 查表值=基地址+中断向量码×4
3. 保护模式下中断响应过程
(1) 中断描述符表
(2) 错误码
(3) 响应过程
由图7.22可见,中断或异常发生后,从CPU获取它们相应的中断向量码开始中断响应。
①由IDTR的基地址和中断向量码,处理器计算出查表值:查表值=基地址+中断向量码×8
②由中断描述符中规定的选择符,在GDT(全局描述符表)或LDT(局部描述表)中查到代码段描述符。
③由段描述符取出基地址(线性基地址),将其与中断描述符中的偏移量结合在一起,构成中断服务程序的入口地址,即中断服务入口=段线性基地址+偏移量
(4) 断点保护
在图722中未能描绘出在中断响应过程中处理器对断点的保护。第5章说明了8088中断响应时,处理器如何进行断点保护,它将FLAGS、CS和IP分别保存在用户堆栈中。
在80386以后的处理器中,处理器将断点信息保存在特权级最高的核心堆栈中。这是因为后来的处理器都支持多级堆栈。在核心堆栈中所保存的断点信息如图7.23所示。