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