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

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