6.2.180x86中斷結構及類型
80x86 CPU中斷系統的結構示意圖。根據中斷源與CPU的相對位置關系,可分為外部中斷(或硬件中斷)和內部中斷(或軟件中斷)兩大類。在32位CPU中,把外部中斷稱為中斷,把內部中斷稱為異常(Exceptions)。
1.中斷
中斷是指由外部設備觸發請求而引起的硬件中斷。80x86 CPU的硬件中斷有兩個:一個是由NMI引腳引入不可屏蔽中斷,請求觸發方式為上升沿(0到 1的跳變信號)有效;另一個是由INTR引腳引入可屏蔽中斷,請求觸發方式為高電平有效。但由于多數外部設備的I/O傳送中斷請求都是通過可屏蔽中斷引入 的,而CPU的可屏蔽中斷請求(INTR)引腳只有一個,不能滿足外部設備的需要,因此在80x86 CPU系統中擴展一片或多片中斷控制器8259A協 助CPU管理中斷,單片8259A可以管理8級外部中斷請求IR0~IR7,在多片級連方式下,最多可以管理64級的外部中斷請求(8259A的中斷管理 功能見6.3節)。
2.異常
異常是指在CPU執行程序過程中,因各種錯誤引起的中斷,如地址非法、校驗出錯、頁面失效、存取訪問控制錯、結果溢出、除數為0、非法指令等。根據系統對產生異常的處理方法不同,通常分為下列三種類型。
1)故障(Faults)
故障是指某條指令在啟動之后真正執行之前,被檢測到異常而產生的一種中斷。這類異常是在引起異常的指令執行前產生的,待異常處理完成后繼續返回該指令, 重行啟動并執行完成。例如,在啟動某條指令時要訪問的數據未找到(存儲出錯),這種情況下當前指令被掛起,中斷處理之后,由掛起指令處重新啟動。
2)陷阱(Traps)
陷阱是在中斷指令執行過程中引起的中斷。這類異常主要是由執行“斷點指令”或中斷調用指令(INT n)引起,即在執行指令后產生的異常,在中斷處理前要保護設置陷阱的下一條指令的地址(斷點),中斷處理完畢返回到該斷點處繼續執行。
3)終止(Abort)
終止通常由硬件錯誤或系統表出現非法數據引起。異常發生后一般無法確定造成異常指令的準確位置,程序無法繼續執行,中斷處理須重新啟動系統。
以上三類異常的差別主要表現在兩個方面:一是發生異常的報告方式,二是異常處理程序的返回方式。故障這類異常的報告是在引起異常的指令執行之前發生的, 待異常處理完畢,返回該指令繼續執行;陷阱這類異常的報告是在引起異常的指令執行之后發生的,待異常處理完畢,返回該指令的下一條指令繼續執行;終止這類 異常的情況比較嚴重,它是因為系統硬件或參數出現了錯誤而引起的,引起異常的程序將無法恢復,必須重新啟動系統。
80x86 CPU 最多可以管理256種類型的中斷與異常,類型及功能。每一種中斷賦予一個中斷類型號,其中:中斷類型0~17分配給內部中斷(類型2除外);中斷類型 18~31留作備用,為生產廠家開發軟硬件使用;中斷類型32~255留給用戶,可作為外部設備進行輸入輸出數據傳送時的可屏蔽中斷(INTR)請求使 用。
前5個中斷類型(類型0~類型4):除法錯、單步、NMI、斷點、溢出,從8086~Pentium的所有CPU都是相同的,其他中斷類型適用于286及向上兼容的386、486及Pentium微處理器。
幾種異常類型做簡要說明。
類型0:除法出錯。當CPU進行除法運算時,若除數為0或商溢出時產生該中斷。
類型1:單步。當單步執行標志TF1且IF1時,每執行一條指令就引起一次中斷。
類型3:斷點。這是一個特殊的單字節斷點指令INT 3,常用于調試程序時存儲程序的斷點。當CPU執行該指令時,則產生“斷點指令”中斷,將下一條指令的地址入棧保存。
類型4:溢出。當執行INTO指令且溢出標志OF1時產生該中斷。
類型5:越界。當CPU執行BOUND指令時,檢測到操作數超越邊界時產生該中斷。