通過前幾次實驗,對於實模式與保護模式間的跳轉已經有了充分認知。此次實驗與接下來的實驗主要集中在認識保護模式下的一些特性,
如多任務的基礎(局部任務LDT)、分頁機制、中斷、異常、I/O等。爲了儘可能將實驗設計的簡單,我儘量將以上實驗壓縮在引導扇區的
512字節內。爲了節省空間,我將pm16.c精簡了許多,它只負責跳轉到保護模式(程序限制在80字節以內),在pm32.c裏會重新加載新
的GDT(程序加載到內存0x7c50處)。
此次實驗內容爲:
(pm16.c部分)
1.清屏,並跳轉到保護模式(pm32.c,內存地址0x7c50)
(pm32.c部分)
1.加載新的GDT
2.爲GDT中局部任務描述符設置LDT的基地址
3.顯示字符串This is protect model.
4.跳轉到局部任務
5.顯示字符串This is local model.
6.進入死循環
實驗代碼如下:
code:run.c(因爲重新設置了pm32.c的內存分佈,所以需要修改run.c中的幾個數據,下面是修改好了的run.c代碼)
code:pm.h
code:pm16.c
code:pm32.c
想要實驗以上代碼的朋友請注意:
1.到楊曉兵大大的博客上下載安裝yc09編譯器,安裝只需一分鐘左右。
2.將此次試驗中的run.c、pm.h、pm16.c、pm32.c代碼拷貝到某個實驗用的文件夾內。
3.在安裝yc09的目錄YC09/example文件夾內找到bochs.exe、BIOS-bochs-latest、VGABIOS-elpin-2.40、x11-pc-us.map四個文件拷貝到試驗用的文件夾內。
4.使用yc09編譯運行run.c