系統設計的步驟:
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種 故障,是在已被檢測到異常的指令之前的指令邊界上報告的異常.故障在恢復到允許指令重新啟動狀態時...