我一直在寫一個有點基本的引導程序,它在Bochs中像桃子一樣工作。但是,在我的實際機器上,有幾條指令亂碼,引導加載程序失敗。我已經診斷出這種疾病,但沒有很好的治療方法。看來,BIOS(順便說一句,UEFI在兼容模式下)正在尋找BIOS參數塊(BPB),找不到一個(因爲我沒有創建一個),並且蠻橫地覆蓋某些字節,從而搞亂了引導程序。我目前的解決它的方法是通過保留(零)開始我總成從第50個字節我的程序與如何停止BIOS(BPB)覆蓋部分引導加載程序?
resb 50
這不是一個很好的解決方案,但是。考慮到bootloader只有512字節,這是一個巨大的空間浪費。這大約浪費了10%的空間!所以這裏是我的問題:
有沒有更好的方法來規避/停止/禁用bios覆蓋bootloader的一部分?從我的引導程序中獲取最多字節的最佳方式是什麼?
您需要在引導加載程序開始時創建一個BPB,以便BIOS不會寫入代碼。因爲有些BIOS會在引導程序開始時沒有找到某些特定的指令(JMP通常是最好的選擇),所以會拒絕加載引導程序。一些BIOS甚至可能試圖通過檢查內容和一些BIOS盲目寫入來確定是否有有效的BPB。 –
以上是假設您正在使用USB軟盤模擬。如果使用USB HDD仿真,您可能會發現不需要BPB,但您可能需要一個有效的分區表,並在分區中標記爲可引導的分區以便識別它。 –
可以在本節[SO Answer](https://stackoverflow.com/a/43787939/3857942)(以NASM編寫)中的代碼段_Complete Example with Int 13h Extension Checks_下找到DOS 4.0 BPB。該示例創建了一個假的1.44MB Floppy BPB。 _BPB_包含JMP。因此,從'boot:'標籤到'main'標籤的所有內容都是BPB –