我正在寫啓動加載程序並卡住了一個545字節的文件,我不知道如何加載。如果它是存儲在第二扇區中的512字節文件,則它可以輕鬆加載到內存中。但是這對我來說似乎有點奇怪。如何從我的引導加載程序中將545字節(或更多)文件加載到內存中?
我該怎麼做?
我正在寫啓動加載程序並卡住了一個545字節的文件,我不知道如何加載。如果它是存儲在第二扇區中的512字節文件,則它可以輕鬆加載到內存中。但是這對我來說似乎有點奇怪。如何從我的引導加載程序中將545字節(或更多)文件加載到內存中?
我該怎麼做?
關於已刪除的問題,How do I embedded C and Assembly in 16 bit?:
創建調用一個簡單的「內核」不一定是困難......但它不是東西,你可以在一個單行回答「引導程序」問題。
第一個問題是 - 問:你的目標平臺是什麼?
聽起來像 - 答:從FAT(或FAT32)啓動媒體加載的Intel x86 CPU。
第二個問題=問:你的「開發工作站」是什麼?您是在Windows上編譯/彙編代碼並創建啓動映像嗎?在Linux上? 「其他」?我們假設「linux」。由於很多原因,這是一個「不錯的選擇」。
正如其他人指出的那樣,這個C程序是不您的 「核心」 是不錯的選擇:
的main.c =>
#include<stdio.h>
int main(int argc, char *argv[]) {
printf("Hello world!!!");
return 0;
}
你」 d需要鏈接到C運行時庫(「CRTL」)以獲得「printf()」。
您還需要事先調用crt0.obj以獲取「main()」。
即使您這樣做了,您選擇的CRTL和crt0.obj可能與16位實模式不兼容。
即使您已經涵蓋1),2)和3),您仍然需要一個操作系統(例如DOS,Linux或Windows)才能真正執行「printf()」。
SUGGESTION:
試圖通過本教程(也有在網絡上很多類似的例子):
他對Windows.More信息發展可以從他的其他問題得出這裏:http://stackoverflow.com/questions/36044706/how-to-make-bootloader-to-load-the-second-sector-of-a-usb –
只需在第一個512字節的MBR引導加載程序中加載第二個扇區即可。 –
@Praveen - 如果您還有其他問題,請將其作爲一個新問題。 –
你是說你的bootloader是545字節?如果您發佈的代碼最終爲545字節,這將有所幫助。起初我以爲你在談論第二個階段,但現在我想知道你的啓動器本身是否是545。在你的問題中發佈你的啓動扇區代碼,我們可能對你的問題有更好的理解 –