BIOSは、各ブートデバイスの最初のセクター(512バイト)を読み取り、特定の署名バイトのセットをチェックすることにより、ハードドライブ(またはフロッピードライブ)からコンピューターをブートします。それらのバイトが見つかると、512バイトのセクターが(特定の位置にある)RAMにコピーされ、BIOSがジャンプして実行します。
それ以外の場合、署名バイト、セクター内の446バイトをブートプログラムとして使用できますが、ブートプログラムはそのセクターに完全に適合する必要があります。446バイトはそれほど大きくないため、BIOS呼び出しを行って、他のセクターをハードドライブ(またはフロッピードライブなど)からRAMにコピーして実行する必要があります。
プログラムを実行するのに十分な量のRAMをロードしたら、それにジャンプして、準備が整います。
これが、オペレーティングシステムが文字通り「独自のブートストラップによって自分自身を引き上げる」方法です。
http://en.wikipedia.org/wiki/Master_boot_recordを参照してください
さて、CまたはC ++(または他のほとんどのもの)でブートコードを記述できなかった理由はありませんが、アセンブリを使用すると、生成されるコードが正確にわかり、BIOS呼び出しを簡単に行うことができます。
プログラムをディスクからRAMにロードし、プログラムの開始アドレスにジャンプする512バイトのディスクドライブをRAMコピー機に書き込むことをお勧めします。その後、任意の言語でプログラムを作成できます。ブートコードの実行が開始されると、RAMのように信頼できるのはこれらの512バイトだけであることに注意してください。(BIOSはBIOS呼び出しを行うことができます。BIOSはRAM内の特定の場所にもシステム情報を配置します...)そのセクター外で作成した関数を呼び出したい場合は、次のことを行う必要があります。それらを自分でRAMにロードします。
また、コードをテストする最も簡単な方法は、おそらくフロッピーディスクにコードを入れて起動することです。
元の質問に答えるために、古いMBRのバックアップコピーをどこかに保存し、新しいMBRで関数をRAMにロードして実行し、次に元のMBRをロードして実行すると、ウィンドウの起動を続行できます。
また、Michael Burrは正しいです。あなたがやりたいことを成し遂げることは、悪夢になるでしょう。
これを実際にハードドライブに書き込む方法についてのコメントに答えて、ディスク上のセクターにコピーできる「生の書き込み」プログラムがいくつかあります。また、Linux Live CDから起動し、ddを使用して、選択したブロックデバイス上の選択したセクターにデータを書き込むこともできます。-その部分をパイのように単純です。