程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 匯編語言 >> 80386的中斷和異常

80386的中斷和異常

編輯:匯編語言

80386除了保持8086/80386的相關功能外,還增強了中斷處理能力,並引入了“異常”的概念。本文將介紹80386中斷和異常的機制。

8086/8088把中斷分為內部中斷和外部中斷兩大類。為了支持多任務和虛擬存儲器等功能,80386把外部中斷稱為“中斷”,把內部中斷稱為“異常”。與8086/8088一樣,80386通常在兩條指令之間響應中斷或異常。80386最多處理256種中斷或異常。

1.中斷

    對80386而言,中斷是由異步的外部事件引起的。外部事件及中斷響應與正執行的指令沒有關系。通常,中斷用於指示I/O設備的一次操作已完成。與8086/8088一樣,80386有兩根引腳INTR和NMI接受外部中斷請求信號。INTR接受可屏蔽中斷請求。NMI接受不可屏蔽中斷請求。在80386中,標志寄存器EFLAGS中的IF標志決定是否屏蔽可屏蔽中斷請求。     外部硬件在通過INTR發出中斷請求信號的同時,還要向處理器給出一個8位的中斷向量。處理器在響應可屏蔽中斷請求時,讀取這個由外部硬件給出的中斷向量號。處理器對這個中斷向量號並沒有規定。但在具體的微機系統中,系統必須通過軟件和硬件的配合設置,使得給出的這個中斷向量號不僅與外部中斷源對應,而且要避免中斷向量號使用沖突情況的出現。可編程中斷控制器芯片8259A可配合80386工作,能夠根據設置向處理器提供上述中斷向量號,還能處理中斷請求的優先級。每個8259A芯片可以支持8路中斷請求信號,如果使用9個8259A芯片(一個主片,8個從片),就可使80386在單個引腳INTR上接受多達64個中斷源的中斷請求信號。     處理器不屏蔽來自NMI的中斷請求。處理器在響應NMI中斷時,不從外部硬件接收中斷向量號。與8086/8088一樣,在80386中,不可屏蔽中斷所對應的中斷向量號固定為2。為了不可屏蔽中斷的嵌套,每當接受一個NMI中斷,處理器就在內部屏蔽了再次響應NMI,這一屏蔽過程直到執行中斷返回指令IRET後才結束。所以,NMI處理程序應以IRET指令結束。

2.異常

    異常是80386在執行指令期間檢測到不正常的或非法的條件所引起的。異常與正執行的指令有直接的聯系。例如,執行除法指令時,除數等於0。再如,執行指令時發現特權級不正確。當發生這些情況時,指令就不能成功完成。軟中斷指令“INT n”和“INTO”也歸類於異常而不稱為中斷,這是因為執行這些指令產生異常事件。     80386識別多種不同類別的異常,並賦予每一種類別以不同的中斷向量號。異常發生後,處理器就象響應中斷那樣處理異常。即根據中斷向量號,轉相應的中斷處理程序。把這種中斷處理程序稱為異常處理程序可能更合適。     根據引起異常的程序是否可被恢復和恢復點不同,把異常進一步分類為故障(Fault)、陷阱(Trap)和中止(Abort)。我們把對應的異常處理程序分別稱為故障處理程序、陷阱處理程序和中止處理程序。     故障是在引起異常的指令之前,把異常情況通知給系統的一種異常。80386認為故障是可排除的。當控制轉移到故障處理程序時,所保存的斷點CS及EIP的值指向引起故障的指令。這樣,在故障處理程序把故障排除後,執行IRET返回到引起故障的程序繼續執行時,剛才引起故障的指令可重新得到執行。這種重新執行,不需要操作系統軟件的額外參與。故障的發現可能在指令開始執行之前,也可能在指令執行期間。如果在指令執行期間檢測到故障,那麼中止故障指令,並把指令的操作數恢復為指令開始執行之前的值。這可保證故障指令的重新執行得到正確的結果。例如,在一條指令的執行期間,如果發現段不存在,那麼停止該指令的執行,並通知系統產生段故障,對應的段故障處理程序可通過加載該段的方法來排除故障,之後,原指令就可成功執行,至少不再發生段不存在的故障。     陷阱是在引起異常的指令之後,把異常情況通知給系統的一種異常。當控制轉移到異常處理程序時,所保存的斷點CS及EIP的值指向引起陷阱的指令的下一條要執行的指令。下一條要執行的指令,不一定就是下一條指令。因此,陷阱處理程序並不是總能根據保存的斷點,反推確定出產生異常的指令。在轉入陷阱處理程序時,引起陷阱的指令應正常完成,它有可能改變了寄存器或存儲單元。軟中斷指令、單步異常是陷阱的例子。     中止是在系統出現嚴重情況時,通知系統的一種異常。引起中止的指令是無法確定的。產生中止時,正執行的程序不能被恢復執行。系統接收中止後,處理程序要重新建立各種系統表格,並可能重新啟動操作系統。硬件故障和系統表中出現非法值或不一致的值是中止的例子。

3.優先級

    在一條指令執行期間,入檢測到不只一個中斷或異常,那麼按下表所列優先級通知系統。把優先級最高的中斷或異常通知系統,其它優先級較低的異常被廢棄,而優先級較高的中斷則保持懸掛。
80386響應
中斷/異常
的優先級 中斷/異常類型 優先級 調試故障 最高 其它故障 ↓ 陷阱指令INT n和INTO ↓ 調試陷阱 ↓ NMI中斷 ↓ INTR中斷 最低
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved