X86保護模式程式設計總結(6)

2021-08-25 13:11:49 字數 2645 閱讀 6651

中斷和異常

中斷:可遮蔽中斷,在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...