天天看點

8086實時時鐘實驗(二)——《x86彙編語言:從實模式到保護模式》讀書筆記06

上次我們說了代碼,這次我們說說怎樣看到實驗結果。

首先編譯源檔案(我的源檔案就在目前路徑下,a盤和c盤在上一級目錄下):

nasm -f bin c08_mbr.asm -o c08_mbr.bin

nasm -f bin c09_1.asm -o c0901.bin

然後将bin檔案寫入a盤和c盤

dd if=c08_mbr.bin of=../a.img

dd if=c0901.bin of=../c.img bs=512 seek=100 conv=notrunc

注意:也許你需要根據自身的情況修改路徑

好了,運作Bochs

可是結果令人失望,不管我怎麼嘗試,都看到了如下的圖

8086實時時鐘實驗(二)——《x86彙編語言:從實模式到保護模式》讀書筆記06

隻能看到螢幕中間的“@”在閃爍,可是根本看不到時間。

8086實時時鐘實驗(二)——《x86彙編語言:從實模式到保護模式》讀書筆記06
8086實時時鐘實驗(二)——《x86彙編語言:從實模式到保護模式》讀書筆記06
8086實時時鐘實驗(二)——《x86彙編語言:從實模式到保護模式》讀書筆記06

我也試圖調試一下,在中斷處理程式裡面打了斷點,可是中斷似乎進不去。

無法運作出正确的結果,也許不是我們錯了,或許是工具的問題。畢竟我用的是win7+vmware+ubuntu+bochs,而不是一個真實的環境。

好吧,既然這條路走不通,那我就換一條路吧。是不是vmware的問題呢?那我們用virtualBox試一試。

于是,我打造了win7+virtualBox+ubuntu+bochs,可是和上面的結果完全一樣,還是失敗了。看來不是vmware的問題。

真的是山窮水盡了嗎?我又想了一個方法,就是作者在第四章推薦的方法,virtualBox+VHD檔案;

說幹就幹,首先,我們需要在virtualBox上建立一台虛拟機。

第1步:啟動VirtualBox,點選【建立】

8086實時時鐘實驗(二)——《x86彙編語言:從實模式到保護模式》讀書筆記06

圖中的名稱是自己起的,我的叫“hello_asm”;

類型和版本也不重要,很多人都會誤解,以為VirtualBox會根據我們的選擇來安裝一個現成的作業系統。其實,并不是這樣,讓我們選擇作業系統的唯一目的,就是根據我們的選擇,在後面的步驟中為我們提供合理的硬體配置。實際上,我們不打算安裝任何作業系統,是以,我選擇了Other。好的,我們點選【下一步】;

第2步:配置設定記憶體大小

8086實時時鐘實驗(二)——《x86彙編語言:從實模式到保護模式》讀書筆記06

記憶體大小就根據自己主機的實體記憶體來配置吧,這裡我選了512M,然後點選【下一步】;

第3步:建立虛拟硬碟(或者用作者提供的)

8086實時時鐘實驗(二)——《x86彙編語言:從實模式到保護模式》讀書筆記06

這裡可以用作者提供的VHD檔案,也可以自己建立。為了不失一般性,我們選擇‘現在建立虛拟硬碟’,點選【建立】

第4步:選擇虛拟硬碟的檔案類型

8086實時時鐘實驗(二)——《x86彙編語言:從實模式到保護模式》讀書筆記06

這裡一定要選擇VHD,因為我們打算用作者提供的工具(fixvhdwr.exe),然後點選【下一步】;

第5步:選擇虛拟硬碟的類型

8086實時時鐘實驗(二)——《x86彙編語言:從實模式到保護模式》讀書筆記06

一定要選擇“固定大小”,因為本書的配套工具隻支援固定大小的。然後點選【下一步】

第6步:選擇虛拟硬碟的位置和大小

8086實時時鐘實驗(二)——《x86彙編語言:從實模式到保護模式》讀書筆記06

VHD檔案位置是自己設定的,一定要放在一個你可以找到的地方。其實,放在作者提供的配書工具所在的檔案夾是最友善的。我這裡放在D盤。

另外,還要選擇虛拟硬碟的大小,我選了2GB;作者的要求是,一定要大于50MB

8086實時時鐘實驗(二)——《x86彙編語言:從實模式到保護模式》讀書筆記06

,然後點選【建立】;

通過以上6步,我們的虛拟硬碟就建立好了。

下面的任務是把我們的bin檔案寫入虛拟盤,最後看一下結果。

第1步:打開作者的配書工具——fixvhdwr.exe

8086實時時鐘實驗(二)——《x86彙編語言:從實模式到保護模式》讀書筆記06

第2步:選擇虛拟磁盤檔案

8086實時時鐘實驗(二)——《x86彙編語言:從實模式到保護模式》讀書筆記06

找到我們剛才儲存虛拟硬碟的目錄,選擇哪個VHD檔案,然後【下一步】;

8086實時時鐘實驗(二)——《x86彙編語言:從實模式到保護模式》讀書筆記06

第3步:選擇資料檔案

8086實時時鐘實驗(二)——《x86彙編語言:從實模式到保護模式》讀書筆記06

找到我們編譯好的c08_mbr.bin檔案

第4步:設定起始LBA扇區号,并寫入檔案

8086實時時鐘實驗(二)——《x86彙編語言:從實模式到保護模式》讀書筆記06

因為是啟動檔案,是以我們選擇0,然後點選【寫入檔案】;之後可以看到:

8086實時時鐘實驗(二)——《x86彙編語言:從實模式到保護模式》讀書筆記06

最後點選【完成】;

通過上面4個步驟,我們就把一個.bin檔案寫入VHD檔案了。

用同樣的方法,我們可以把c0901.bin(使用者程式)寫入邏輯扇區100(起始邏輯扇區号一定要和代碼中的保持一緻);

下面,我們啟動虛拟機,看看結果吧:

8086實時時鐘實驗(二)——《x86彙編語言:從實模式到保護模式》讀書筆記06

啟動虛拟機,我們終于看到了螢幕中央閃爍的時間!

經過上面的折騰,我覺得不是VMware的問題,也不是VirtualBox的問題,很可能是Bochs的問題!

心血來潮,我想到了我安裝的Bochs不是最新版本,也許我可以弄個最新版本試一試。

于是我在VMware上安裝了Bochs-2.6.8,按照以前的方法,得出的結果又驚喜又困惑,請看圖:

8086實時時鐘實驗(二)——《x86彙編語言:從實模式到保護模式》讀書筆記06

看到了嗎?螢幕中央有時間了!

遺憾的是,這個時間跳動得太快了,也就是說這個時鐘走得特别快,根本不是每秒一次的更新頻率。我想這還是Bochs的問題吧。

好了,今天就到這裡,下次再見

8086實時時鐘實驗(二)——《x86彙編語言:從實模式到保護模式》讀書筆記06

繼續閱讀