-1

OS に依存しない完全なプログラムを C++ で書こうとしています。OS (つまり Windows) を起動する直前にプログラムをロードしたい。MBR を単純な「Hello World」プログラムに置き換えようとしましたが、何も起こらず、仮想ハードディスクのパーティション テーブルが失われました。プログラムまたはソースコードを直接実行するには、C++ コンパイラを MBR に書き込む必要があると思います。

Q. コンパイラは EXE 形式なので、Windows または DOS が必要です。MBRに書き込めますか?

Q. C++ プログラムには DOS プラットフォームが必要です。OSなしで実行できますか?

ブートローダーと同じ種類のプログラムを作成しようとしています。

4

1 に答える 1

1

そのようなプログラムをプレーンな C/C++ で書くことは不可能です。OS はなく、コンパイラは「フリースタンディング」モードで動作するはずです。このモードでは、「stdin.h」ヘッダーはなく、ファイルもファイル アクセスも printf も使用できません。

asmそのため、プログラムはキーワードなどを使用して BIOS 関数を直接呼び出す必要があります。

COMMBR バイナリのフォーマットは、DOS のファイルフォーマットに非常に近いです。短い COM プログラムを MBR ブート コードに変換することができます (コンパイルのいくつかのパラメーターを操作することによって)。

また、MBR は 1 セクターの長さで、パーティション テーブルが含まれていることも知っておく必要があります。したがって、バイナリ コードを格納するのに最大 450 バイトしかありません。

于 2011-08-28T23:30:28.317 に答える