中斷如何處理
當CPU(中央處理器)執(zhí)行一條現行指令的時候,如果外設向CPU發(fā)出中斷請求,那么CPU在滿足響應的情況下,將發(fā)出中斷響應信號,與此同時關閉中斷,表示CPU不在受理另外一個設備的中斷。這時,CPU將尋找中斷請求源是哪一個設備,并保存CPU自己的程序計數器(PC)的內容。然后,他將轉移到處理該中斷源的中斷服務程序。CPU在保存現場信息,設備服務(如交換數據)以后,將恢復現場信息。在這些動作完成以后,開放中斷,并返回到原來被中斷的主程序的下一條指令。
在微機系統中,對于外部中斷,中斷請求信號是由外部設備產生,并施加到CPU的NMI或INTR引腳上,CPU通過不斷地檢測NMI和INTR引腳信號來識 別是否有中斷請求發(fā)生。對于內部中斷,中斷請求方式不需要外部施加信號激發(fā),而是通過內部中斷控制邏輯去調用。無論是外部中斷還是內部中斷,中斷處理過程 都要經歷以下步驟: 請求中斷→響應中斷→關閉中斷→保留斷點→中斷源識別→保護現場→中斷服務子程序→恢復現場→中斷返回。
請求中斷當某一中斷源需要CPU為其進行中斷服務時,就輸出中斷請求信號,使中斷控制系統的中斷請求觸發(fā)器置位,向CPU請求中斷。系統要求中斷請求信號一直保持到CPU對其進行中斷響應為止。
中斷響應CPU對系統內部中斷源提出的中斷請求必須響應,而且自動取得中斷服務子程序的入口地址,執(zhí)行中斷 服務子程序。對于外部中斷,CPU在執(zhí)行當前指令的最后一個時鐘周期去查詢INTR引腳,若查詢到中斷請求信號有效,同時在系統開中斷(即IF=1)的情 況下,CPU向發(fā)出中斷請求的外設回送一個低電平有效的中斷應答信號,作為對中斷請求INTR的應答,系統自動進入中斷響應周期。
關閉中斷CPU響應中斷后,輸出中斷響應信號,自動將狀態(tài)標志寄存器FR或EFR的內容壓入堆棧保護起來,然后將FR或EFR中的中斷標志位IF與陷阱標志位TF清零,從而自動關閉外部硬件中斷。因為CPU剛進入中斷時要保護現場,主要涉及堆棧操作,此時不能再響應中斷,否則將造成系統混亂。
保護斷點保護斷點就是將CS和IP/EIP的當前內容壓入堆棧保存,以便中斷處理完畢后能返回被中斷的原程序繼續(xù)執(zhí)行,這一過程也是由CPU自動完成。
中斷源識別當系統中有多個中斷源時,一旦有中斷請求,CPU必須確定是哪一個中斷源提出的中斷請求,并由中斷控制器給出中斷服務子程序的入口地址,裝入CS與IP/EIP兩個寄存器。CPU轉入相應的中斷服務子程序開始執(zhí)行。
保護現場主程序和中斷服務子程序都要使用CPU內部寄存器等資源,為使中斷處理程序不破壞主程序中寄存器的內容,應先將斷點處各寄存器的內容壓入堆棧保護起來,再進入的中斷處理。現場保護是由用戶使用PUSH指令來實現的。