"Intel手册第3卷主要涵盖了中断和异常处理机制,特别是在Intel64或IA-32架构的处理器上的保护模式下。手册详细解释了各种中断和异常的处理方式,同时也指出大部分内容适用于实地址模式、虚拟8086模式以及64位模式。此外,对于在实地址和虚拟8086模式下的中断和异常机制,读者可以参考第15章‘8086模拟’获取专门的信息。"
在Intel处理器的中断和异常处理中,有多个不同的中断类型,每种中断都有其特定的触发原因和处理方式:
1. **除法出错异常(#DE)**: 当执行除法指令时,若除数为零或发生其他数学错误,就会触发此中断。
2. **调试异常(#DB)**: 用于调试目的,如断点或单步执行时会发生。
3. **非屏蔽中断(NMI)**: 不可被当前中断屏蔽的外部中断,通常用于紧急情况或实时系统。
4. **断点异常(#BP)**: 在遇到软件设置的断点或硬件断点时触发,常用于调试。
5. **溢出异常(#OF)**: 当算术运算结果超出数据类型所能表示的范围时触发。
6. **BOUND越界异常(#BR)**: 当数组访问超出边界时,处理器会引发此异常。
7. **非法操作码异常(#UD)**: 执行的指令是处理器不识别或不支持的操作码时触发。
8. **设备不可用异常(#NM)**: 当处理器试图调用不支持的协处理器或浮点运算时发生。
9. **双重故障异常(#DF)**: 当前异常处理过程中发生另一个异常,表明硬件或软件有严重问题。
10. **无效TSS异常(#TS)**: 任务状态段(TSS)无效或无法访问时触发。
11. **段不存在(#NP)**: 指定的段在GDT或LDT中不存在,或者段选择子无效。
12. **栈故障异常(#SS)**: 栈指针错误,例如ESP/RSP无效或栈溢出时触发。
13. **通用保护异常(#GP)**: 当执行了非法的内存访问或违反了保护规则时触发。
14. **页故障异常(#PF)**: 试图访问的内存页不在物理内存中,需要页面交换。
16. **x87FPU浮点错误(#MF)**: 浮点运算单元(FPU)遇到错误,如除以零、溢出等。
17. **对齐检测异常(#AC)**: 对齐错误,例如访问的数据不是按照特定对齐方式存放的。
18. **机器检测异常(#MC)**: 处理器检测到内部硬件错误,如热插拔错误或电源问题。
19. **SIMD浮点异常(#XM)**: 针对SIMD(单指令多数据)浮点运算的异常。
20. **用户定义中断**: 从32到255的中断编号留给用户自定义的中断,用于扩展系统功能。
处理这些中断和异常的过程通常包括保存上下文、确定异常类型、执行相应的异常处理程序,以及在条件允许的情况下恢复执行。在保护模式下,处理器使用中断描述符表(Interrupt Descriptor Table, IDT)来查找并调用对应的中断服务例程。
异常处理机制确保了系统的稳定性和安全性,它们能够捕获并修复错误,防止程序崩溃,并允许操作系统进行适当的响应,如终止进程、记录错误日志或迁移线程。在不同的处理器模式下,如实地址模式和虚拟8086模式,中断处理方式可能会有所不同,这需要根据具体模式的特性进行调整。例如,虚拟8086模式需要额外的模拟层来处理与实模式兼容的中断和异常。