汇编语言 内部中断
內部中斷不需要硬件支持,不受IF標志控制,不執行中斷總線周期,除單步中斷可通過TF標志允許或禁止外,其余都是不可屏蔽的中斷。內部中斷分為以下幾種:
(1)除法錯誤中斷。CPU在執行觸發指令時,若發現除數為0或者所得的商超過了寄存器能容納的范圍,則自動產生一個類型為0的除法錯誤中斷。
(2)單步中斷。如果CPU的單步標志TF置1,那么每執行完一條指令后,會自動產生類型為1的單步中斷,CPU響應中斷后,暫停執行下條指令,轉到單步中斷服務程序去執行,其結果是將CPU的內部寄存器和有關存儲期的內容顯示出來,便于跟蹤程序的執行過程,實現動態排錯。
中斷向量表
中斷服務程序的入口地址通常被稱為中斷向量或中斷矢量。8086可處理256類中斷,類型號為0~255(0 ~ FFH)。每類中斷有一個入口地址,需用4個字節存儲CS和IP,256類中斷的入口地址要占用1K字節,它們位于內存0000 ~ 003FFH的區域中,存儲了這些地址的連續空間稱為中斷向量表或中斷矢量表。
類型號為0~4的5個中斷被定義為專用中斷,它們分別是:除法錯誤中斷、單步中斷、不可屏蔽中斷、斷點中斷和溢出中斷,它們的中斷服務程序的入口地址分別存放在00H、04H、08H、0CH和10H開始的4個連續單元中。
CPU 通過中斷類型碼找到中斷向量表和程序地址的位置。
| 00 ~ 03 | 0 | 除法錯誤中斷 |
| 04 ~ 07 | 1 | 單步中斷 |
| 08 ~ 0B | 2 | 非屏蔽中斷 |
| 0C ~ 0F | 3 | 斷點中斷 |
| 10 ~ 13 | 4 | 溢出中斷 |
| 14 ~ 17 | 5 | 打印屏幕 |
| 18 ~ 1F | 6/7 | 保留 |
例如:
如上圖
- 0號中斷源對應的中斷處理程序的入口地址為: F000:1060
- 1號中斷源對應的中斷處理程序的入口地址為: 01A3:13BB
- 2號中斷源對應的中斷處理程序的入口地址為: 0070:0008
- 3號中斷源對應的中斷處理程序的入口地址為: 01A3:13B1
總結:
存儲N號中斷源的中斷處理程序入口的偏移地址的內存單元的地址
- 段地址:N * 4 + 2
- 偏移地址: N * 4
中斷過程
1.取得中斷類型碼
2.保存標志位寄存器 → pushf
3.將標志位寄存器的第 8 TF 和 第9位 IF 設置為0
4.push cs
5.push ip
6.cs = N4+2 ip=N4
中斷處理程序返回的方法
ss:sp ip cs pushfiret 指令可實現以下的指令
- pop ip
- pop cs
- popf
總結
- 上一篇: 使用Xftp连接树莓派并传输文件
- 下一篇: 汇编语言 标志位