19

bios が 0000:7c00 のパーティションのブート レコードを読み取るのはなぜですか? そのアドレスの特別な点は何ですか? アドレスを参照する際に ':' は何をしているのですか?

4

4 に答える 4

23

簡単な答えは、7C00h は、元の 32k の取り付けられたメモリの下部から 1k (ブート セクタ用の 512 バイトと、可能なブート セクタ用の追加の 512 バイト) であるということです。

幸いなことに、これorg 7C00hはブート セクタ (ブート ローダー プログラミング) と同義になっています。

于 2010-08-25T00:35:00.087 に答える
13

「:」は、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 にジャンプします」

于 2010-01-13T17:22:04.250 に答える
3

この記事を読む:

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ページを参照)にあります。

http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-3a-part-1-manual.pdf

この段階では、不揮発性(つまり、簡単に再プログラムできないため、ブートローダーの責任の一部ではありません)BIOSコードを実行しています。

于 2012-02-18T11:56:46.190 に答える