中断向量表

http://blog.sina.com.cn/s/blog_44ab50510100ofor.html
 
(中断源的识别标志,可用来形成相应的中断服务程序的入口地址或存放中断服务程序的首地址)称为中断向量。在Pc/AT中由硬件产生的中断标识码被称为中断类型号(当然,中断类型号还有其他的产生方法,如指令中直接给出、CPU自动形成等),即在中断响应期间8259A产生的是当前请求中断的最高优先级的中断源的中断类型号。中断类型号和中断向量之间有下面的关系: 中断类型号×4=存放中断向量的首地址 有了存放中断向量的首地址,从该地址开始的4个存储单元中取出的就是中断服务程序的入口
 

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自己设置的中断以后再添加。
原文地址:https://www.cnblogs.com/johnnyflute/p/3764999.html