中斷和異常
中斷:可遮蔽中斷,在cpu的intr引腳接收的中斷請求,if=1時才允許發生可遮蔽中斷
不可遮蔽中斷,在cpu的nmi輸入腳上接收到,cpu無法關閉不可遮蔽中斷.
異常:cpu檢測的異常被分為3種:
故障,是在已被檢測到異常的指令之前的指令邊界上報告的異常.故障在恢復到允許指令重新啟動狀態時由機器報告.用於故障處理程式的返回位址指向故障的指令,而不是指會故障指令之後的指令.
自陷,自陷是在已被檢測到異常指令之後緊接著的指令邊界上報告的異常.
中止,中止並不總是報告引起的異常的指令位置,並且不允許引起異常的程式重新啟動.中止被用來報告幾種錯誤,例如硬體錯誤和在系統表中有不一致的或非法值.
由程式設計引發的異常.into,int3,bound指令觸發.常稱為軟體中斷.cpu象異常一樣處理它
異常和中斷表
向量號說明(實)異常源
0(y,故障)除法錯div和idiv指令
1除錯程式呼叫任何
2nmi中斷不可遮蔽中斷
3(n,自陷)斷點int指令
4(n,自陷)溢位
5(y,故障)bound範圍超出(陣列範圍超出)bound指令
6(y,故障)無效操作碼保留的操作碼
7(y,故障)裝置不可用esc或wait指令
8(y,中止)雙故障中斷表限大小,在處理故障時發生另乙個故障
9(intel保留,不要用)
10(y,故障)無效任務狀態段jmp.call,ret
11(y,故障)段不存在改變段的任何指令
12(y,故障)堆疊異常堆疊操作超越位址限值
13(y,故障/自陷)一般保護
14(y,故障)頁面故障引起儲存器的任何指令
15(intel保留,不要用)
16(y,故障)浮點錯esc或wait
17(y,故障)對齊檢查任何資料引用
18機器檢查異常
19-31(intel保留,不要用)
32-255(n,自陷)可遮蔽中斷(軟中斷)
eflags暫存器的rf標誌用來防止對乙個指令斷點故障多次服務,在每一條指令順利完成時,rf均被cpu清零,除了iret,jmp,call,int這些引起任務切換的指令之後.在第一次試圖執行指令時rf為零,而若試圖在乙個指令斷點或任務其它故障之後重新啟動指令,rf置1.
同時發生多個異常和中斷時的優先順序
(高) 類說明
1在上一指令自陷
--斷點
--除錯自陷異常(tf=1,tss中t=1,或資料/io斷點)
2外部中斷
--nmi中斷
--可遮蔽中斷
3取下一指令時的故障
--**斷點故障
--**段超越
--預取時的頁故障
4下一指令解碼時的故障
--非法操作碼
--指令長度》15位元組
--協處理器不可用
5執行指令時的故障
--一般檢測
--fp錯誤(來自前面的fp指令)
--溢位中斷
--bound超出範圍
--無效tss
--段不存在
--堆疊異常
--一般保護異常
--資料頁故障
--對齊檢查
中斷門和自陷門的區別:
主要區別是它們對if標誌(eflags中)的影響.使用中斷門的中斷清零if,這樣防止了其它中斷干擾當前中斷處理程式.其後面的iret指令把if恢復為保持在堆疊上的eflags寄存的內容.而通過自陷門的中斷不改變if.
中斷過程中堆疊的變化(異常和中斷之後的堆疊禎):
[無特權級改變[無特權級改變[特權級改變[特權級改變
無出錯**]有出錯**]無出錯**]有出錯**]
原eflags原eflags不用(來自tss的esp)不用(來自tss的esp)
原cs原cs原ss原ss
原eip原eip原esp原esp
出錯**原cs原eflags
原eip原cs
原eip
出錯**
出錯**:
格式: 31-16 15-3 210
保留 選擇符的 ti idt ext
變址值
注:出錯和選擇符相似
1,如果程式的外部事件引起異常,則ext=1
2,如果出錯**的變址值部分引用idt中的門描述符,則idt=1
3,如果idt=0,則ti位指明出錯**引用gdt還是ldt (ti=0?gdt:ldt)
4,3-15位對應選擇符的高位.
異常條件:
下面每項描述將異常分為故障,自陷和中止
故障 --- 儲存cs和eip的內容並指向產生故障的指令
自陷 --- 保持在自陷發生時儲存的cs和eip的內容,指向產生自陷的指令之後將被執行的令.如果在轉移指令時檢測到自陷,則保持的cs和eip是轉移的目標.而不是轉移指令
中止 --- 中止是既不知道引起異常的指令位置,又不允許重新啟動引起異常的程式的那種異常.中止被用來報告嚴重的錯誤.
X86保護模式程式設計總結(6)
中斷和異常 中斷 可遮蔽中斷,在cpu的intr引腳接收的中斷請求,if 1時才允許發生可遮蔽中斷 不可遮蔽中斷,在cpu的nmi輸入腳上接收到,cpu無法關閉不可遮蔽中斷.異常 cpu檢測的異常被分為3種 故障,是在已被檢測到異常的指令之前的指令邊界上報告的異常.故障在恢復到允許指令重新啟動狀態時...
X86保護模式程式設計總結(1)
系統設計的步驟 1,初始化相關硬體.並裝入系統.2,取得並測試相應硬體的引數.並初始化如x387等硬體.3,載入gdt到gdtr 第乙個描述符必須為0,至少需要乙個 段和乙個資料段 4,載入idt到idtr 必須先關中斷,載入完後可開啟 5,設定cr0中pe 1 也可和pg位一起設,並用jmp大跳 ...
X86保護模式程式設計總結(4)
cpu標識 eflage標誌位 8086cpu 第12 15位始終置位 intel286cpu 在實模式下,12 15位始終清除 32位cpu 在實模式下,第15位始終清除,第12 14位具有最後被裝入的值.在保護模式下,第14位具有最後被裝入的值,第15位被清除.第18位 intel486和pen...