BIOSエントリーアドレス0xFFFF0について
昔から、パソコンの電源を入れるとCSが0xFFFF、IPが0x0000になるので、アドレスが0xFFFF0になり、これがBIOSのエントリアドレスで、その後CPUがこのアドレスのコードを読み込んで、ブラブラと実行が始まると言われています。
さて、この0xFFFF0というアドレスはマザーボード上にあるのか、それともメモリ上にあるのか、気になるところです。一様なアドレスであれば、マザーボード上のROMを読みに行くのかもしれないと思いつつ、本の図を見るとRAMにあるように見えるし、もしメモリにあるのなら、いつ、どのプログラムがROMからメモリに読み込むのだろう。推測すると、ROMの内容をすべてメモリ上のセグメントの最上位ビットにコピーし、その後0xFFFF0は必ずメモリ上のアドレスを参照する、という処理を固定的にハードウェア実装しているはずです。
Baiduに記事があります。
640KB〜1MBの上位メモリ(この領域のアドレスはROMに割り当てられ、対応する384KBのRAMはマスクアウトされています。(いわゆるシャドーメモリ技術で、ROMの内容を対応するアドレスのRAMに読み込んで、後でシステムが元のROMからではなく、RAMからデータを読み出すことで高速化する)
1MB~ 拡張メモリ
注意事項
シャドーRAM Shadow RAMは、システムのメインメモリアドレス空間の一部を占有しています。アドレス範囲はC0000~FFFFFFで、1MBのメインメモリの768KB~1024KBの領域となります。Shadow RAM は、各種 ROM BIOS の内容を保存するために使用されます。ROMシャドウとも呼ばれ、ROM BIOSの"shadow"を指し、Shadow RAMと同じ意味である。現在では、コンピュータシステムの電源を入れると同時に、Shadow RAMの指定された領域にBIOS情報が読み込まれる。Shadow RAMは対応するROMと物理的にアドレスしているので、BIOSをアクセスする必要があるとき、ROMの代わりにShadow RAMだけをアクセスすればよく、コンピュータシステムの計算時間を大幅に短縮することができる。ROMへのアクセス時間は200ns程度が一般的で、DRAMへのアクセス時間は100ns以下、60ns以下、あるいはそれ以上となります。
Shadow RAM技術では、コンピュータシステムの動作中に、BIOSからデータを読み出したり、BIOSのプログラムモジュールを呼び出したりすることがかなり頻繁に起こることは間違いありませんが、Shadow RAM技術では、これが大幅に改善されるのです。
386以前と386以降ではこのアドレスは異なるが、どちらもシステムメモリの最上位アドレスセグメントである。CSセグメントは16ビット、EIPは32ビットなので、32ビットアドレスを得るために、386ではCSセグメントに隠しフィールドであるいくつかのフィールドを追加し、システムはGDT,IDTでセグメント選択サブフィールドを変更できるため、アドレス変換はセグメントアドレス+オフセットアドレスの4ビット左シフトではなく、CSのベースフィールド+オフセットアドレスで行われることになる。オフセット・アドレスです。
以下はその一例です。
システムの電源が入ると、システムがリセットされます。このとき、386以前のシステムでは、CS = F000H、IP = FFFF0H、Biosアドレスはセグメント・アドレスの4ビット左シフト + オフセット・アドレス squeeze、すなわちF0000H + FFF0H = FFFF0H となります。
386以前のシステムでアドレス可能な範囲は1MB、すなわち00000H~FFFFFHです。
386の下ではCS=F000H、IP=FFFF0Hと一定ですが、その後CScsの中身は。
セレクタ=F000H(これは見えている部分です)
非表示の部分は、この時点では、実アドレスモードなので、Biosアドレスは、386以前の
しかし、386は4GBすなわち00000000HからFFFFFFFFHの範囲でアドレス指定が可能です。このアドレス(000FFFF0H)をBiosアドレスとして使用すると、システムメモリが連続しないため、386はハードウェアでA20からA31のアドレスラインを1にセットし、FFFFFF0Hとし、これをBiosアドレスとして使用する。
この1へのセットにより、HiddenセクションのフィールドBase=FFFFF0000Hとなり、まだプロテクトモードになっておらず、ディスクリプタテーブルも作成されていないため、この操作を変更しても実装されない。これはハードウェアで実装されており、セグメント間のジャンプが行われた場合、1から0にするようになっているため、1を設定した結果を保存することができず、FFFFFF0Hでjmp , Base = 000000Hという命令を実行すると、その時点でBiosは1M以下のメモリを使用することになるのです。
エントリーアドレスの形成について、CS 0xFFFFとIP 0x0000の組み合わせとする記事と、CS 0xF000とIP 0xFFF0の組み合わせとする記事があります。最終的に形成されるエントリーアドレスが0xFFFF0であれば、ハードウェアによって初期化が異なるということもあるのでしょうね。もし、私の推測と違うのであれば、また追加して来てください。
関連
-
セキュアブートの意味とBIOSで解決する方法
-
コンピュータのBIOSは、BIOSのCD - ROMブート3種類を設定する方法は、光学ドライブのブートグラフィックの詳細チュートリアルを設定する
-
パソコンのハードディスクモードを変更するには?コンピュータのハードディスクモード変更 bios設定チュートリアル
-
コンピュータのバイオは、ハードディスクのオプションの原因を分析し、解決策を見つけることができません。
-
セブンスレインボーマザーボードは、バイオスでハードディスクモードを設定することにより、頻繁にブルースクリーンのグラフィックのチュートリアルを回避することができます。
-
Biosエラーコードの紹介
-
バイオは、光学ドライブを無効にする方法、光学ドライブソフトウェアをブロックの選択肢を無効にする
-
biosブートパスワード 設定・解除方法 biosブートパスワード操作紹介
-
Lenovo computer bios startup items set graphic tutorial 詳細。
-
U disk one key boot bios設定のグラフィカルなチュートリアル
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Biosでハードディスクモードを変更する方法を教えてください。
-
BIOSパスワードのクラック方法 7種類のBIOSパスワードクラック方法
-
デルコンピューターのバイオスパスワードをクリアする方法は?DELL BIOSパスワードのクラック方法
-
BIOS 光学ドライブの起動順序の設定方法 光学ドライブの初回起動を設定する3つのBIOS方式の詳細図
-
BIOSセットアップとCMOSセットアップの違いと接続について
-
Uディスクで作られた起動ディスクでコンピュータを起動する方法?Bios set U disk boot diagram tutorial
-
ASUSマザーボードでbiosに入った後、VT仮想化技術オプションを有効にする方法は?
-
Androidエミュレータのパフォーマンスを向上させるために、BIOSでVT仮想化技術を有効にする方法
-
BIOSでフロッピーディスクドライブをオフにする方法は?BIOSでフロッピーディスクドライブをオフにする方法に関するグラフィックチュートリアル
-
Coms 工場出荷時の設定を復元する bios 設定を復元する方法 グラフィック チュートリアル