如何进入保护模式?
IA-32為操作系統及其軟件的發展提供了大量的支持,它提供了4種操作模式:
?1,Real Mode,匯編書中的實模式,工作方式相當于8086。
?2,Protected Mode,保護模式,提供支持多任務環境的工作形式。
?3,Virtual 8086 Mode,虛擬8086模式,可以從保護模式切換成一種8086工作方式,可以使用戶在保護模式下方便的運行一個或者多個8086源程序。
?4,System Management Mode。
?
?在IA-32中,我們需要重點學習的是Protected Mode。
?查閱資料發現稍微老一些的匯編書中,只列出1-3這3種模式及他們的工作特點。
?出于好奇和探究,對第四種模式SMM進行了了解。
?首先只有SMI才會引起進入SMM,處理器保護現場,切換到SMRAM里的一個獨立地址空間執行SMM代碼,RSM指令會使系統返回原來的正常模式。
?SMM相當于實模式,沒有特權級和地址映射,可尋址4GB,可執行所有I/O和可用系統指令。
?當系統處于SMM時,處理器不識別后繼的SMI請求,但是第一個SMI請求可以被鎖存,并在系統退出SMM后被處理。
?
?內存在IA-32中被分為2個部分,Segmentation,Paging。
?Segmentation提供了一種機制可以分隔DATA,CODE,STACK以便多個程序在同一個處理器運行時不會互相妨礙。
?Paging提供了一個通常的命令頁,將程序執行的虛擬內存系統映射在物理內存當中。它同樣也為多任務提供隔離。
?
?GDT是Protected Mode必須的數據結構,所以進入保護模式之前必須先設定好GDT。
?設定GDT,可以采用Basic Flat Model,因為這個Model要求至少兩個段描述符,一個用來引用Data segment,一個用來引用Code segment。
?除此之外,還需要定義一個系統規定的空描述符。
?設置好GDT后,需要通過LGDT指令將設定的gdt入口地址和gdt表大小裝入GDTR寄存器。
?
這時需要設置A20。
?A20我感覺就是系統升級時留下的BUG,8086/8088只有20位地址線,能夠表示的最大內存為1M,當需要訪問100000h~10FFEFh之間的內存,必須有第21根地址線,這個就是A20。
?現在在實模式下,能訪問最大的內存也只有10FFEFh,再訪問更大的需要進入保護模式,進入保護模式前,需要先打開A20。現在多數PC都是通過8204鍵盤控制器來處理A20,但A20和8204其實沒什么關系。通過匯編實現A20開啟代碼如下:
asm push ax asm in al,92h asm or al,00000010b asm out 92h,al asm pop ax?
之后開始切換到保護模式
?
asm mov eax,cr0 asm or eax,1 asm mov cr0,eax?
?實質是將之前說過的PE位置1。
?理論上,這樣就進入了保護模式。
?
轉載于:https://www.cnblogs.com/wudibuzaijia/p/8483871.html
總結
- 上一篇: 概念+实战讲解,一文带你了解RFM模型【
- 下一篇: .rp的文件打开