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

2021-08-25 13:10:44 字數 875 閱讀 8421

系統設計的步驟:

1, 初始化相關硬體.並裝入系統.

2, 取得並測試相應硬體的引數.並初始化如x387等硬體.

3, 載入gdt到gdtr(第乙個描述符必須為0,至少需要乙個**段和乙個資料段)

4, 載入idt到idtr(必須先關中斷,載入完後可開啟)

5, 設定cr0中pe=1(也可和pg位一起設,並用jmp大跳)並重新裝載段暫存器.

6, 建立頁目錄和頁表,並將頁目錄基位址放入cr3

7, 將cr0中pe=1&&pg=1 (設定之後需用jmp指令重新整理預取指令佇列,pentium不用)

8, 建立ldt並將它在gdt中的索引裝入ldtr(可選)

9, 建立第乙個任務的tss,並將它在gdt中的索引裝入tr(可選).

從保護模式轉回實模式步驟:

1, 如果分頁被開啟,執行以下步驟:

a,將控制轉移給具有等同對映的線性位址.確保gdt和idt是等同對映的.

b,將cr0暫存器的pg位清0.

c,設定cr3=0,以便清洗tlb.

2,將控制轉移給具有64k限制(0x0ffff)的段.這將向cs暫存器裝入在實方式中所需的段限.確保gdt和idt處於實位址儲存器(0-1m).

3,向段暫存器ss,ds,es,fs和gs裝入包含以下值的描述符用的選擇符.這些值適用於實位址方式下:

4, 禁止中斷.包括nmi中斷(可用外部電路來禁止)

5, 將cr0暫存器的pe=0

6, 用遠端jmp指令跳轉到實方式的程式.這將清洗指令對列.並對cs的訪問權置以適當的值,在pentiumcpu中不需要此步.

7, 使用lidt指令來裝入實位址中斷向量表的基位址和段限.

8, 開啟中斷

9, 按實位址方式的需要裝入段暫存器.

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...

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

中斷和異常 中斷 可遮蔽中斷,在cpu的intr引腳接收的中斷請求,if 1時才允許發生可遮蔽中斷 不可遮蔽中斷,在cpu的nmi輸入腳上接收到,cpu無法關閉不可遮蔽中斷.異常 cpu檢測的異常被分為3種 故障,是在已被檢測到異常的指令之前的指令邊界上報告的異常.故障在恢復到允許指令重新啟動狀態時...