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