head.s被編譯成system模塊的最前面部分,故而稱為頭部。
這段程序處于地址的絕對0處,首先是加載各個數據段寄存器,重新設置中斷描述符表 idt,共 256 項,并使各個表項均指向一個只報錯誤的啞中斷
程序。然后重新設置全局描述符表 gdt。接著使用物理地址 0 與 1M 開始處的內容相比較的方法,檢測 A20 地址線是否已真的開啟(如果沒有開
啟,則在訪問高于 1Mb 物理內存地址時 CPU 實際只會訪問(IP MOD,如果檢測下來發現沒有開啟,則進入死循環。然后程序測試 PC 機是否含有數
學1Mb)地址處的內容)協處理器芯片(80287、80387 或其兼容芯片),并在控制寄存器 CR0 中設置相應的標志位。接著設置管理內存的分頁處
理機制,將頁目錄表放在絕對物理地址 0 開始處(也是本程序所處的物理內存位置,因此這段程序將被覆蓋掉),緊隨后面放置共可尋址 16MB 內存
的 4 個頁表,并分別設置它們的表項。最后利用返回指令將預先放置在堆棧中的/init/main.c 程序的入口地址彈出,去運行 main()程序。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
