計算機(jī)畢業(yè)論文在DOS實模式下直接存取4GB內(nèi)存_第1頁
計算機(jī)畢業(yè)論文在DOS實模式下直接存取4GB內(nèi)存_第2頁
計算機(jī)畢業(yè)論文在DOS實模式下直接存取4GB內(nèi)存_第3頁
計算機(jī)畢業(yè)論文在DOS實模式下直接存取4GB內(nèi)存_第4頁
計算機(jī)畢業(yè)論文在DOS實模式下直接存取4GB內(nèi)存_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、計算機(jī)畢業(yè)論文在DOS實模式下直接存取4GB內(nèi)存 計算機(jī)畢業(yè)論文-在DOS實模式下直接存取4GB內(nèi)存 作為軟件 _人員,大多數(shù)對于保護(hù)模式都感到神秘和不易理解。本人在 _32位微內(nèi)核搶占式多線程操作系統(tǒng)過程中,深入了解到CPU的地址機(jī)理,在這里將分析CPU的工作原理,解開保護(hù)模式的神秘面紗,讀者將會發(fā)現(xiàn)保護(hù)模式其實與實模式一樣簡單和易于控制。在此基礎(chǔ)上用四五十行C語言程序做到進(jìn)出保護(hù)模式和在實模式之下直接訪問整個4GB內(nèi)存空間。 雖然有許多書籍對保護(hù)模式作解釋,但沒有一本能簡單明了地解釋清楚,冗長煩雜的術(shù)語讓人看著想打瞌睡,甚至還有許多用匯編寫的(可能根本不能運行的)保護(hù)模式試驗程序,事實上用

2、C語言本身就可以做保護(hù)模式的進(jìn)出工作。 我們可能知道CPU上電后從ROM中的BIOS開始運行,而Intel文檔卻說80x86CUP上電總是從最高內(nèi)存下16字節(jié)開始執(zhí)行,那么BIOS是處在內(nèi)存的最頂端64K(FFFF0000H)還是1M之下的64K(F0000H)處呢?事實上在這兩個地方都同時出現(xiàn)(可用后面存取4GB內(nèi)存的程序驗證)。 _?為了弄清楚以上問題,首先要了解CPU是如何處理物理地址的?真的是在實模式下用段寄存器左移4位與偏移量相加,在保護(hù)模式下用段描述符中的 _址加偏移量而兩者是毫無關(guān)聯(lián)的嗎?答案是兩者其實是一樣的。當(dāng)Intel把80286推出時其地址空間變成了24位,從8086的2

3、0位到24位,十分自然地要加大段寄存器才行,實際上它們都被加大了,只是由于保護(hù)的原因加大的部分沒有被程序看見,到了80 _之后地址又從24位加大到32位(80 _SX是24位)。整個段寄存器如下圖所示: 在8086中CPU只有“看得見部分”,從而也直接參與了地址形成運算,但在80286之后,在“看不見部分”中已經(jīng)包含了地址值,“看得見部分”就退化為只是一個標(biāo)號再也不用參與地址形成運算了。地址的形成總是從“不可看見部分”取出基址值與偏移相加形成地址。也就是說在實模式下當(dāng)一個段寄存器被裝入一個值時,“看不見部分”的界限被設(shè)成FFFFH,基址部分才是要裝入值左移4位,屬性部分設(shè)成16位0特權(quán)級。這個

4、過程與保護(hù)模式時裝入一個段存器是同理的,只是保護(hù)模式的“不可見部分”是從描述表中取值,而實模式是一套固定的過程。 對于CPU在形成地址時,是沒有實模式與保護(hù)模式之分的,它只管用基址(“不可見部分”)去加上偏移量。實模式與保護(hù)模式的差別實際上只是保護(hù)處理部件是否工作得更精確而已,比如不允許代碼段的寫入。實模式下的段寄存裝入有固定的形成辦法從而也就不需要保護(hù)模式的“描述符”了,因此保持了與8086/8088的兼容性。而“描述符”也只是為了裝入段寄存器的“不可見部分”而設(shè)的。 從上面的“整個段寄存器”可見CPU的地址形成與“看得見部分”的當(dāng)前值毫無關(guān)系,這也解釋了 _在剛進(jìn)入保護(hù)模式時后面的代碼依然

5、被正確地運行而這時代碼段寄存器CS的值卻還是進(jìn)入保護(hù)模式前的實模式值,或者從保護(hù)模式回到實模式時代碼段CS被改變之前程序是正常地工作,而不會“突變”到CS左移4位的地址上去,比如在保護(hù)模式時CS是08H的選擇器,到了實模式時CS還是08H但地址不會突然變成80H加上偏段量中去。因為地址的形成不理會段寄存器“看得見部分”的當(dāng)前值,這一個值只是在被裝入時對CPU有用。 地址的形成與CPU的工作模式無關(guān),也就是說實模式與0特權(quán)級保護(hù)模式不分頁時是一模一樣的。明白了這一機(jī)理,在實模式下一樣可以處理通常被認(rèn)為只有在保護(hù)模式才能做的事,比如訪問整個機(jī)器的內(nèi)存??梢圆槐乩頃Wo(hù)模式下的眾多術(shù)語,或者更易于理

6、解,如選擇器就是“看得見部分”,描述符是為了裝入“不可見部分”而設(shè)的。 作為驗證CPU的這種機(jī)理,這里寫了一個實模式下訪問4GB內(nèi)存的C程序。有一些書籍也介紹有同樣功能的匯編程序,但它們都錯誤地認(rèn)為是利用80 _芯片的設(shè)計疏漏。實際上Intel本身就在使用這種辦法,使得CPU上電時能從FFFFFFF0H處開始第一條指令,這種技術(shù)在286之后的每一臺機(jī)器每一次冷啟動時都使用,只是我們不知道罷了。CPU上電也整個代碼段寄存器是這樣的: 12A08401.GIF;圖2 EIP=0000FFF0H 這樣CSEIP形成了FFFFFFF0H的物理地址,當(dāng)CPU進(jìn)行一次遠(yuǎn)跳轉(zhuǎn)重新裝入CS時,基址就變了。 為了訪問4G內(nèi)存空間,必須有一個段寄存器的“不可見部分”的界限為4G-1,基址為0,這樣就包含了4GB內(nèi)存,不必理會可見部分的值。顯然要讓段寄存器在實模式下直接裝入這些值是不可能的。唯一的辦法是讓CPU進(jìn)入一會兒保護(hù)模式在裝入了段寄存器之后馬上回到實模式。 進(jìn)入保護(hù)模式十分簡單,只要建好GDT把CRO寄存器的位0置上1,CPU就在保護(hù)模式了,從前面所分析CPU地址形成機(jī)理可知,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論