中断向量表
目录
1中断向量编辑
是指中断服务程序入口地址的偏移量与段基值,一个中断向量占据4字节空间。中断向量表是8088系统内存中最低端1K字节空间,它的作用就是按照中断类型号从小到大的顺序存储对应的中断向量,总共存储256个中断向量。在中断响应过程中,CPU通过从接口电路获取的中断类型号(中断向量号)计算对应中断向量在表中的位置,并从中断向量表中获取中断向量,将程序流程转向中断服务程序的入口地址。
2中断向量表编辑
80x86系统是把所有的中断向量集中起来,按中断类型号从小到大的顺序存放到存储器的某一区域内,这个存放中断向量的存储区叫做中断向量表,即中断服务程序入口地址表。
由于中断向量表可以在操作系统层面灵活修改,因此,不同的系统的中断向量表可能是不同的。此外,intel在CPU的保护模式下,占用了0x00 ~ 0x1F共32个中断号,在Linux下,是从0x20开始用于系统自身的中断的,包括8259芯片的中断重置。
BIOS(实模式)的中断向量表如下:
80x86中断向量
I/O ADDR
|
INT TYPE(16进制)
|
FUNCTION
|
00 ~ 03
|
0
|
除法溢出中断
|
04 ~ 07
|
1
|
单步(用于DEBUG)
|
08 ~ 0B
|
2
|
非屏蔽中断(NMI)
|
0C ~ 0F
|
3
|
断点中断(用于DEBUG)
|
10 ~ 13
|
4
|
溢出中断
|
14 ~ 17
|
5
|
打印屏幕
|
18 ~ 1F
|
6/7
|
保留
|
8259主片中断向量
I/O ADDR
|
INT TYPE(16进制)
|
FUNCTION
|
20 ~ 23
|
8
|
定时器(IRQ0)
|
24 ~ 27
|
9
|
键盘(IRQ1)
|
28 ~ 2B
|
A
|
彩色/图形(IRQ2)
|
2C ~ 2F
|
B
|
串行通信COM2(IRQ3)
|
30 ~ 33
|
C
|
串行通信COM1(IRQ4)
|
34 ~ 37
|
D
|
LPT2控制器中断(IRQ5)
|
38 ~ 3B
|
E
|
磁盘控制器中断(IRQ6)
|
3C ~ 3F
|
F
|
LPT1控制器中断(IRQ7)
|
BIOS中断向量
I/O ADDR
|
INT TYPE(16进制)
|
FUNCTION
|
40 ~43
|
10
|
视频显示 I/O
|
44 ~ 47
|
11
|
设备检验
|
48 ~ 4B
|
12
|
测定存储器容量
|
4C ~ 4F
|
13
|
磁盘 I/O
|
50 ~ 53
|
14
|
|
54 ~ 57
|
15
|
系统描述表指针
|
58 ~ 5B
|
16
|
键盘 I/O
|
5C ~ 5F
|
17
|
打印机 I/O
|
60 ~ 63
|
18
|
ROM BASIC 入口代码
|
64 ~ 67
|
19
|
引导装入程序
|
68 ~ 6B
|
1A
|
日时钟
|
提供给用户的中断
I/O ADDR
|
INT TYPE(16进制)
|
FUNCTION
|
6C ~ 6F
|
1B
|
Ctrl - Break 控制的软中断
|
70 ~ 73
|
1C
|
|
74 ~ 77
|
1D
|
视频参数块
|
78 ~ 7B
|
1E
|
软盘参数块
|
7C ~ 7F
|
1F
|
图形字符扩展码
|
在DOS系统(实模式)下,从0x20开始,用于操作系统本身。
DOS中断向量
I/O ADDR
|
INT TYPE(16进制)
|
FUNCTION
|
80 ~ 83
|
20
|
DOS 中断返回
|
84 ~ 87
|
21
|
DOS 系统功能调用
|
88 ~ 8B
|
22
|
程序中止时 DOS 返回地址(用户不能直接调用)
|
8C ~ 8F
|
23
|
Ctrl - Break 处理地址(用户不能直接调用)
|
90 ~ 93
|
24
|
严重错误处理(用户不能直接调用)
|
94 ~ 97
|
25
|
绝对磁盘读功能
|
98 ~ 9B
|
26
|
绝对磁盘写功能
|
9C ~ 9F
|
27
|
终止并驻留程序
|
A0 ~ A3
|
28
|
DOS安全使用
|
A4 ~ A7
|
29
|
快速写字符
|
A8 ~ AB
|
2A
|
Microsoft 网络接口
|
B8 ~ BB
|
2E
|
基本 SHELL 程序装入
|
BC ~ BF
|
2F
|
多路服务中断
|
CC ~ CF
|
33
|
鼠标中断
|
104 ~ 107
|
41
|
硬盘参数块
|
118 ~ 11B
|
46
|
第二硬盘参数块
|
11C ~ 3FF
|
47 ~ FF
|
BASIC 中断
|
保护模式下的中断向量表
在Linux下(保护模式),没有使用BIOS设置的中断向量表,0x00 ~ 0x1F是CPU保护模式下的默认中断向量,而0x20开始,都是被Linux系统重新设置的。
X86占用的中断向量表如下:
向量号
|
助记符
|
说明
|
类型
|
错误号
|
产生源
|
---|---|---|---|---|---|
0
|
#DE
|
除出错
|
故障
|
无
|
DIV或IDIV指令。
|
1
|
#DB
|
调试
|
故障/陷阱
|
无
|
任何代码或数据引用,或是INT 1指令。
|
2
|
--
|
NMI中断
|
中断
|
无
|
非屏蔽外部中断。
|
3
|
#BP
|
断点
|
陷阱
|
无
|
INT 3指令。
|
4
|
#OF
|
溢出
|
陷阱
|
无
|
INTO指令。
|
5
|
#BR
|
边界范围超出
|
故障
|
无
|
BOUND指令。
|
6
|
#UD
|
无效操作码
|
故障
|
无
|
UD2指令或保留的操作码。
|
7
|
#NM
|
设备不存在
|
故障
|
无
|
浮点或WAIT/FWAIT指令。
|
8
|
#DF
|
双重错误
|
异常终止
|
有(0)
|
任何可产生异常、NMI或INTR的指令。
|
9
|
--
|
协处理器段超越(保留)
|
故障
|
无
|
浮点指令
|
10
|
#TS
|
无效的任务状态段TSS
|
故障
|
有
|
任务交换或访问TSS
|
11
|
#NP
|
段不存在
|
故障
|
有
|
加载段寄存器或访问系统段
|
12
|
#SS
|
堆栈段错误
|
故障
|
有
|
堆栈操作或SS寄存器加载
|
13
|
#GP
|
一般保护错误
|
故障
|
有
|
任何内存引用和其他保护检查
|
14
|
#PF
|
页面错误
|
故障
|
有
|
任何内存引用
|
15
|
--
|
(intel保留)
|
|
无
|
|
16
|
#MF
|
x87 FPU浮点错误
|
故障
|
无
|
|
17
|
#AC
|
对齐检查
|
故障
|
有(0)
|
对内存中任何数据的引用。
|
18
|
#MC
|
机器检查
|
异常终止
|
无
|
错误码(若有)和产生源与CPU类型有关。
|
19
|
#XF
|
SIMD浮点异常
|
故障
|
无
|
|
Linux自己设置的中断以后再添加。