介紹
是指中斷服務程式入口地址的偏移量與段基值,一個中斷向量占據4位元組空間。中斷向量表是8088系統記憶體中最低端1K位元組空間,它的作用就是按照中斷類型號從小到大的順序存儲對應的中斷向量,總共存儲256箇中斷向量。在中斷回響過程中,CPU通過從接口電路獲取的中斷類型號(中斷向量號)計算對應中斷向量在表中的位置,並從中斷向量表中獲取中斷向量,將程式流程轉向中斷服務程式的入口地址。
列表
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 | RS-232 串列口 I/O |
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自己設定的中斷以後再添加。