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