2016-04-12 52 views
-1

我正在寫啓動加載程序並卡住了一個545字節的文件,我不知道如何加載。如果它是存儲在第二扇區中的512字節文件,則它可以輕鬆加載到內存中。但是這對我來說似乎有點奇怪。如何從我的引導加載程序中將545字節(或更多)文件加載到內存中?

我該怎麼做?

+0

只需在第一個512字節的MBR引導加載程序中加載第二個扇區即可。 –

+0

@Praveen - 如果您還有其他問題,請將其作爲一個新問題。 –

+0

你是說你的bootloader是545字節?如果您發佈的代碼最終爲545字節,這將有所幫助。起初我以爲你在談論第二個階段,但現在我想知道你的啓動器本身是否是545。在你的問題中發佈你的啓動扇區代碼,我們可能對你的問題有更好的理解 –

回答

2

關於已刪除的問題,How do I embedded C and Assembly in 16 bit?

  1. 創建調用一個簡單的「內核」不一定是困難......但它不是東西,你可以在一個單行回答「引導程序」問題。

  2. 第一個問題是 - 問:你的目標平臺是什麼?

    聽起來像 - 答:從FAT(或FAT32)啓動媒體加載的Intel x86 CPU。

  3. 第二個問題=問:你的「開發工作站」是什麼?您是在Windows上編譯/彙編代碼並創建啓動映像嗎?在Linux上? 「其他」?我們假設「linux」。由於很多原因,這是一個「不錯的選擇」。

  4. 正如其他人指出的那樣,這個C程序是您的 「核心」 是不錯的選擇:

的main.c =>

#include<stdio.h> 

int main(int argc, char *argv[]) { 
    printf("Hello world!!!"); 
    return 0; 
} 
  1. 你」 d需要鏈接到C運行時庫(「CRTL」)以獲得「printf()」。

  2. 您還需要事先調用crt0.obj以獲取「main()」。

  3. 即使您這樣做了,您選擇的CRTL和crt0.obj可能與16位實模式不兼容。

  4. 即使您已經涵蓋1),2)和3),您仍然需要一個操作系統(例如DOS,Linux或Windows)才能真正執行「printf()」。

SUGGESTION

試圖通過本教程(也有在網絡上很多類似的例子):

+0

他對Windows.More信息發展可以從他的其他問題得出這裏:http://stackoverflow.com/questions/36044706/how-to-make-bootloader-to-load-the-second-sector-of-a-usb –

相關問題