上次我們說了代碼,這次我們說說怎樣看到實驗結果。
首先編譯源檔案(我的源檔案就在目前路徑下,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
可是結果令人失望,不管我怎麼嘗試,都看到了如下的圖
隻能看到螢幕中間的“@”在閃爍,可是根本看不到時間。
我也試圖調試一下,在中斷處理程式裡面打了斷點,可是中斷似乎進不去。
無法運作出正确的結果,也許不是我們錯了,或許是工具的問題。畢竟我用的是win7+vmware+ubuntu+bochs,而不是一個真實的環境。
好吧,既然這條路走不通,那我就換一條路吧。是不是vmware的問題呢?那我們用virtualBox試一試。
于是,我打造了win7+virtualBox+ubuntu+bochs,可是和上面的結果完全一樣,還是失敗了。看來不是vmware的問題。
真的是山窮水盡了嗎?我又想了一個方法,就是作者在第四章推薦的方法,virtualBox+VHD檔案;
說幹就幹,首先,我們需要在virtualBox上建立一台虛拟機。
第1步:啟動VirtualBox,點選【建立】
圖中的名稱是自己起的,我的叫“hello_asm”;
類型和版本也不重要,很多人都會誤解,以為VirtualBox會根據我們的選擇來安裝一個現成的作業系統。其實,并不是這樣,讓我們選擇作業系統的唯一目的,就是根據我們的選擇,在後面的步驟中為我們提供合理的硬體配置。實際上,我們不打算安裝任何作業系統,是以,我選擇了Other。好的,我們點選【下一步】;
第2步:配置設定記憶體大小
記憶體大小就根據自己主機的實體記憶體來配置吧,這裡我選了512M,然後點選【下一步】;
第3步:建立虛拟硬碟(或者用作者提供的)
這裡可以用作者提供的VHD檔案,也可以自己建立。為了不失一般性,我們選擇‘現在建立虛拟硬碟’,點選【建立】
第4步:選擇虛拟硬碟的檔案類型
這裡一定要選擇VHD,因為我們打算用作者提供的工具(fixvhdwr.exe),然後點選【下一步】;
第5步:選擇虛拟硬碟的類型
一定要選擇“固定大小”,因為本書的配套工具隻支援固定大小的。然後點選【下一步】
第6步:選擇虛拟硬碟的位置和大小
VHD檔案位置是自己設定的,一定要放在一個你可以找到的地方。其實,放在作者提供的配書工具所在的檔案夾是最友善的。我這裡放在D盤。
另外,還要選擇虛拟硬碟的大小,我選了2GB;作者的要求是,一定要大于50MB
,然後點選【建立】;
通過以上6步,我們的虛拟硬碟就建立好了。
下面的任務是把我們的bin檔案寫入虛拟盤,最後看一下結果。
第1步:打開作者的配書工具——fixvhdwr.exe
第2步:選擇虛拟磁盤檔案
找到我們剛才儲存虛拟硬碟的目錄,選擇哪個VHD檔案,然後【下一步】;
第3步:選擇資料檔案
找到我們編譯好的c08_mbr.bin檔案
第4步:設定起始LBA扇區号,并寫入檔案
因為是啟動檔案,是以我們選擇0,然後點選【寫入檔案】;之後可以看到:
最後點選【完成】;
通過上面4個步驟,我們就把一個.bin檔案寫入VHD檔案了。
用同樣的方法,我們可以把c0901.bin(使用者程式)寫入邏輯扇區100(起始邏輯扇區号一定要和代碼中的保持一緻);
下面,我們啟動虛拟機,看看結果吧:
啟動虛拟機,我們終于看到了螢幕中央閃爍的時間!
經過上面的折騰,我覺得不是VMware的問題,也不是VirtualBox的問題,很可能是Bochs的問題!
心血來潮,我想到了我安裝的Bochs不是最新版本,也許我可以弄個最新版本試一試。
于是我在VMware上安裝了Bochs-2.6.8,按照以前的方法,得出的結果又驚喜又困惑,請看圖:
看到了嗎?螢幕中央有時間了!
遺憾的是,這個時間跳動得太快了,也就是說這個時鐘走得特别快,根本不是每秒一次的更新頻率。我想這還是Bochs的問題吧。
好了,今天就到這裡,下次再見
!