中断向量
保护模式下80386执行指令过程中产生的异常如下表总结:
0
#DE
除法错
Fault
无
DIV 和 IDIV 指令
1
#DB
调试异常
Fault/Trap
无
任何代码和数据的访问
2
--
非屏蔽中断
Interrupt
无
非屏蔽外部中断
3
#BP
调试断点
Trap
无
指令 INT 3
4
#OF
溢出
Trap
无
指令 INTO
5
#BR
越界
Fault
无
指令 BOUND
6
#UD
无效(未定义)操作码
Fault
无
指令 UD2 或者无效指令
7
#NM
设备不可用(无数学协处理器)
Fault
无
浮点指令或 WAIT/FWAIT 指令
8
#DF
双重错误
Abort
有(或零)
所有能产生异常或 NMI 或 INTR 的指令
9
协处理器段越界
Fault
无
浮点指令(386之后的 IA32 处理器不再产生此种异常)
10
#TS
无效TSS
Fault
有
任务切换或访问 TSS 时
11
#NP
段不存在
Fault
有
加载段寄存器或访问系统段时
12
#SS
堆栈段错误
Fault
有
堆栈操作或加载 SS 时
13
#GP
常规保护错误
Fault
有
内存或其他保护检验
14
#PF
页错误
Fault
有
内存访问
15
--
Intel 保留, 未使用
16
#MF
x87FPU浮点错(数字错)
Fault
无
x87FPU 浮点指令或 WAIT/FWAIT 指令
17
#AC
对齐检验
Fault
有(ZERO)
内存中的数据访问(486开始)
18
#MC
Machine Check
Abort
无
错误码(如果有的话)和源依赖于具体模式(奔腾 CPU 开始支持)
19
#XF
SIMD浮点异常
Fault
无
SSE 和 SSE2浮点指令(奔腾 III 开始)
20-31
--
Intel 保留, 未使用
32-255
--
用户定义中断
Interrupt
外部中断或 int n 指令
以上所列的异常中包括 Fault/Trap/Abort 三种, 当然你也可以称之为错误, 陷阱和终止:
Fault:一种可被更正的异常,一旦被更正,程序可以不失连续性地继续执行,中断程序返回地址为产生 Fault 的指令。
Trap:发生 Trap 的指令执行之后立刻被报告的异常, 也允许程序不失连续性地继续执行, 但中断程序返回地址是产生 Trap 之后的那条指令。
Abort:Abort 异常不总是精确报告发生异常的位置,它不允许程序继续执行,而是用来报告严重错误。
Last updated