2016-04-12 2 views
-1

私はブートローダを書き、545バイトのファイルでスタックしていました。ロードする方法はわかりません。第2セクタに格納された512バイトのファイルであれば、容易にメモリにロードすることができます。しかし、これは私にとってはちょっと変わったようです。私のブートローダから545バイト(またはそれ以上)のファイルをメモリにロードするには?

どうすればよいですか?

+0

最初の512バイトMBRブートローダにセクタをロードするだけです。 –

+0

@Praveen - 別の質問がある場合は、新しい質問としてその質問をしてください。 –

+0

あなたのブートローダーは545バイトだと言っていますか? 545バイトになるコードを投稿した場合に役立ちます。最初は私はあなたが第二段階について話していると思っていましたが、あなたのブーツセクター自体が545であるかどうか疑問に思っています。あなたのブートセクタコードをあなたの質問に載せてください。私たちはあなたの問題をよりよく理解しているかもしれません。 –

答えて

2

削除した質問、How do I embedded C and Assembly in 16 bit?

  1. 必ずしも難しいことではありません...しかし、それはあなたが1行に答えることができるものではありません、単純な「カーネル」を起動する「ブートローダー」を作成質問も。

  2. 最初の質問は - Q:ターゲットプラットフォームとは何ですか?

    - A:FAT(またはFAT32)ブートメディアからロードされたIntel x86 CPU。

  3. 2番目の質問= Q:「開発用ワークステーション」とは何ですか? Windowsでコードをコンパイル/アセンブルしてブートイメージを作成していますか? Linuxでは? "他の何か"? "linux"と仮定しよう。多くの理由から、それは「良い選択」です。

  4. 他の人が指摘したように、このCプログラムは、あなたの "カーネル" のために良い選択ないです:

のmain.c =>

#include<stdio.h> 

int main(int argc, char *argv[]) { 
    printf("Hello world!!!"); 
    return 0; 
} 
  1. あなたは」 d "printf()"を得るためにCランタイムライブラリ( "CRTL")にリンクする必要があります。

  2. "main()"を取得するには、事前にcrt0.objを呼び出す必要があります。

  3. CRTLとcrt0.objは、16ビットのリアルモードと互換性がない可能性があります。

  4. 実際に "printf()"を実行するには、1)、2)、3)についても、OS(DOS、Linux、Windowsなど)が必要です。

SUGGESTION

このチュートリアルを作業してください(ウェブ上の多くの類似例があります):

+0

彼はWindowsで開発しています。ここ:http://stackoverflow.com/questions/36044706/how-to-make-bootloader-to-load-the-second-sector-of-a-usb –