bios が 0000:7c00 のパーティションのブート レコードを読み取るのはなぜですか? そのアドレスの特別な点は何ですか? アドレスを参照する際に ':' は何をしているのですか?
4 に答える
簡単な答えは、7C00h は、元の 32k の取り付けられたメモリの下部から 1k (ブート セクタ用の 512 バイトと、可能なブート セクタ用の追加の 512 バイト) であるということです。
幸いなことに、これorg 7C00h
はブート セクタ (ブート ローダー プログラミング) と同義になっています。
「:」は、PC がリアル モードで実行され、一度に 64K しか処理できなかったセグメント メモリの時代からの名残りです。「:」の左側の数字がセグメント、右側の数字がアドレスです。
Windows の debug コマンドは、自分でメモリを調べたい場合、次の表記法を受け入れます。
C:\Users\Seth> debug
-d0000:7c00
0000:7C00 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:7C10 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:7C20 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:7C30 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:7C40 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:7C50 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:7C60 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:7C70 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
この特定のアドレスに関しては、MBR をロードするために選択されたアドレスです。https ://web.archive.org/web/20140701052540/http://www.ata-atapi.com/hiwmbr.html を参照してください。
「MBR が見つかった場合、メモリの場所 0000:7c00 に読み込まれ、INT 19 がメモリの場所 0000:7c00 にジャンプします」
この記事を読む:
http://en.wikibooks.org/wiki/X86_Assembly/Bootloaders
上記のURLから、BIOS(事実上PCハードウェア)は0000:7c00にメモリにジャンプし、16ビットモードで実行を継続します。
そして上から引用するには:
ブートローダーは、ブートローダーを成功させるためにプログラマーが理解しなければならない特定の条件下で実行されます。以下は、PCBIOSによって開始されたブートローダーに関連しています。
- ドライブの最初のセクターには、ブートローダーが含まれています。
- 1つのセクターは512バイトです。最後の2バイトは0xAA55(つまり、0x55の後に0xAA)である必要があります。そうでない場合、BIOSはドライブを起動不能として扱います。
- すべてが正常であれば、最初のセクターはRAMアドレス0000:7C00に配置され、BIOSの役割は終了して0000:7C00に制御を移します。(つまり、そのアドレスへのJMP)
したがって、起動から、CPUにコードの実行を開始させたい場合は、0000:7c00にメモリに配置する必要があります。また、コードのこの部分は、ハードディスクの最初のセクターからロードされます。これもハードウェアによって行われます。そして、ロードされるのは最初のセクターのみであり、コードの他の部分は、この最初の「ブートローダー」によってロードされる必要があります。
ハードディスクの最初のセクターと7c00の設計に関する詳細情報:
http://www.ata-atapi.com/hiwdos.html
http://www.ata-atapi.com/hiwmbr.html
CPUの起動モードと混同しないでください。CPUがフェッチして実行する最初の命令は、物理アドレス0xfffffff0(9-5ページを参照)にあります。
この段階では、不揮発性(つまり、簡単に再プログラムできないため、ブートローダーの責任の一部ではありません)BIOSコードを実行しています。