中断向量

保护模式下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