5

X86 アーキテクチャのマスター ブート レコードを実際に構成する明示的なアセンブリ命令について知りたいです。洞察をありがとう。

他のアーキテクチャも歓迎しますが、これは主に X86 向けです。

4

4 に答える 4

14

マスター ブート レコードは 512 バイトで構成され、最後の 2 バイトは0x55 0xAA でなければなりません。残りは 510 バイトです。パーティション テーブル エントリは 16 バイトで、最大で 4 つのパーティション テーブル エントリ、つまり 64 バイトです。パーティション エントリは次のようになります。

残っているのは、446 バイトのアセンブラー コードです。通常、最初の数バイトはブート識別子レコードで構成され、識別子、システム ID などのブート ローダーのディスク データを記述します。次に、BIOS は 0x000:0x07C00 でブート コードを想定し、それ自体を下位に再配置します。メモリ セグメントを下に移動します。ブート ローダーのサンプル チュートリアルについては、こちらを参照してください。それに関するウィキブックスの詳細な技術的概要がここにあります。

注意が必要なのは、ブートローダー コードが 446 バイトを超えてはならないということだけです。オペレーティング システムが見つかりません」などのエラーが発生しました。

ブート セクタでコンパイルされたバイナリをディスクに書き込むには、通常、コンピュータをねじ込む厄介で危険な方法が必要です。Linux では、コマンドは次のようになります。

# /dev/hda1 が最初のハードディスクであると仮定すると...
dd if=mybootldr.bin of=/dev/hda1 bs=512 cnt=1

もう 1 つの方法は、低レベルのディスク エディタ プログラムを使用するか、単純な古い DEBUG.EXE (古い MSDOS ディスケットに含まれています) を使用するか、FreeDosを使用することです。

C:\DEBUG.EXE mybootldr.bin
-W 100 0 0 1
-Q

DR.DOS (デジタル リサーチ DOS) は MS-DOS のライバルであり、DR-DOS の起動前にブート ローダー コードにパスワード保護を使用していたことを思い出してください。

編集: BIOS が 0x0000:0x7C00 をどのように検索するかについて本当に興味がある場合は、元の IBM XT の BIOS コードをダウンロードできるこのリンクを参照してください

これがお役に立てば幸いです。よろしくお願いします、トム。

于 2010-01-26T20:21:24.340 に答える
4

grub1 のステージ 1 から分析された MBR ブートローダーについては、こちらを参照してください: http://thestarman.pcministry.com/asm/mbr/GRUB.htm

于 2010-01-26T19:53:12.033 に答える
3

これらの古い学校のトピックが大好きです;-)

あなたが求めているので、ここに2つのアセンブラのリストがありますexplicit assembly instructions

于 2010-01-26T20:31:14.993 に答える
2

これは、アセンブリで記述されたプレイ可能なテトリス ゲームで、x86 ブート セクターに収まります。10 行を完了することができた場合にのみ通常の OS を起動する、これの変種を見ました。

于 2010-01-26T20:59:48.157 に答える