BIOSのエントリアドレス0 xFFFF 0について
電源投入後、CSを0 xFF、IPを0 x 0000に設定すると、構成されたアドレスが0 xFFFF 0となり、これがBIOSのエントリアドレスとなり、CPUはこのアドレスのコードを読み出し、バラバラの実行を開始します。
今、このアドレス0 xFFFF 0がマザーボードにあるのか、メモリにあるのか知りたいです。統合アドレッシングであればマザーボード上のROMを読み取るかもしれないと思いますが、本の図を読むと、RAMのように、メモリの中にあれば、いつ、どのプログラムでROMの中のプログラムをメモリに読み込んだのかということになります。自分で推測すると、このプロセスは固定的なハードウェアで実現されるべきで、ROMの中のすべての内容をメモリの中で最も高い部分にコピーし、その後、0 xFFFF 0は必然的にメモリの中のアドレスを指す。
百度で見ると、これを言う文章があります。
640 KB~1 MBの上位メモリ(この領域のアドレスがROMに割り当てられ、対応する384 KBのRAMが遮断されている。影メモリ技術とは、ROMの内容を対応するアドレスのRAMに読み出し、その後、システムが元のROMからデータを読み出すのではなく、RAMからデータを読み出すことで速度を向上させるものである。)
1 MB~拡張メモリ
注意:
Shadow RAMコンピュータシステムが稼働している間、BIOSのデータを読み取ったり、BIOSのプログラムモジュールを呼び出したりする操作はかなり頻繁に行われ、Shadow RAM技術を採用すると、作業効率が大幅に向上するに違いない。
386以前と386以降では、このアドレスは異なるが、システムメモリの最高アドレスセグメントにある。386でFFFFF 0 Hとなる。CSセグメントは16ビットであり、EIPは32ビットであるため、1つの32ビットアドレスを得るために、386はCSセグメントにいくつかのフィールドを追加した。これは非表示のフィールドであり、システムはGDT、IDTを通じてセグメント選択子のフィールドを変更することができ、このときアドレス変換はセグメントアドレスが4ビット+オフセットアドレスに左シフトするのではなく、CSのBaseフィールド+オフセットアドレスである。
次に例を示しますシステムに電源を入れると、システムがリセットされます。このとき386以前のシステムではCS=F 000 H,IP=FFF 0 H,Biosアドレスがセグメントアドレス左シフト4ビット+オフセットアドレス押出しであるF 000 H+FFF 0 H=FFFFFFFF 0 H
386以前はシステムアドレス可能範囲が1 MBである00000 H~FFFFFH
386ではCS=F 000 H、IP=FFF 0 Hとなるが、この場合、CScsの内容は、
Selector=F 000 H(これがご覧の部分です)
このとき隠れている部分は使えませんが、実アドレスモードではBiosアドレスは386以前のアドレスと同じで、
しかし386アドレス可能範囲は4 GBである00000000 H~FFFFFFFFHであり、このアドレス(000 FFFF 0 H)をBiosアドレスとするとシステムメモリが不連続となるため、386はハードウェアセット1方式でA 20~A 31アドレス線を1としてFFFFFFF 0 Hとなり、これをBiosアドレスとする。
このセット1の結果、非表示部分のフィールドBase=FFFFFF 0000 Hは、保護モードに入っておらず、記述子テーブルが確立されていないため、記述子テーブルを変更することによって実現されない。これはハードウェアで実現されており、1段間ジャンプを行った場合、セット1の結果は保存できないため、ハードウェア設計は0からセットされるため、FFFFF 0 Hでの命令jmp、Base=00000000 Hが実行された場合、Biosは1 M以下のメモリを使用する。
エントリアドレスの形成については、CS 0 xFFFFとIP 0 x 0000の構成という文章もあれば、CS 0 xF 000とIP 0 xFFF 0の組み合わせという文章もありますが、ハードウェアの初期化が異なるのではないかと思います。最後に形成されたエントリアドレスが0 xFFFFF 0であればいいと思います。私が推測したほどでなければ、後で補充しましょう。