我在寫一個bootloader,但我不確定我所做的是否正確。首先,我使用這個批處理腳本編譯我的bootloader:org 0C700h給出奇怪的輸出
dm\bin\dmc.exe -msdo -c -cpp bootloader.cpp
masm\bin\ml.exe -c bootloaderASM.asm
dm\bin\link.exe /BINARY bootloaderASM.obj bootloader.obj
我使用DMC的編譯器和連接器,與MASM 615彙編一起,他們都應該是16位(DMC是16和32) 。 現在在我的彙編文件bootloaderASM.asm,如果我添加「組織07C00」,輸出文件bootloaderASM.sys變得充滿0的,直到07C00,那麼預期的代碼填寫。但是,如果我刪除它,輸出文件如預期。 據我瞭解,組織指令簡單地調整我的指令使用的地址,以便基地是07C00,我想它不應該用零填充我的輸出文件?
從編譯器和彙編的.obj文件似乎是確定。它們在0x07c00之前不包含前導零,但鏈接器的最終輸出是錯誤的。
現在是連接器的問題?我該如何解決它/你建議一個不同的(16位)鏈接器?另外 - 如果我簡單地忽略我的引導加載程序的組織指令,可以嗎?
此外 - 我已經編寫了一個程序來讀取我的引導程序並將其寫入虛擬硬盤驅動器的引導扇區中,我可以簡單地修改它以忽略鏈接程序輸出中的前導零 - 是否可行?
謝謝。
我沒有使用數字火星的鏈接器,但也許'/BASE和'/ FIXED'開關可以完成你想要的(與'ORG 0'結合)。 – Michael 2013-03-04 11:29:25
謝謝你的回覆。所以我不知道/固定選項如何幫助,但如果我使用/ BASE:31744(07C00十進制)會使得它確定在引導裝載程序組織0? – 2013-03-04 11:55:58
基地址應該以十六進制給出,而不是十進制。不管它是否工作,我都不知道,因爲我沒有使用它。我只是建議它作爲你可以嘗試的東西。 – Michael 2013-03-04 12:01:54