リアルモード
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2023/11/11 04:07 UTC 版)
![]() |
この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。(2020年5月)
|
リアルモード(real mode, real address modeとも)とは、(80286以降の)x86プロセッサの動作モードで、8086互換の動作をするモードである。
全てのx86プロセッサの起動時の動作モードであり、BIOSはこのモードで動作している。このモードにおいては、すべてのレジスタのアドレス幅がデフォルトで16ビットであり、アドレッシングの際はセグメントレジスタの値を16倍して足す単純なアドレス変換により、20ビットのアドレス空間にアクセスすることが可能である。また、割り込みベクタは、最下位アドレス固定である。
80286のリアルモードでは、過去との互換性のためにメモリ空間は1MiBであったが、21ビット目のアドレス線(A20ライン)を有効にすることで65520バイト余計に利用することができた。この領域はHMAとして使用され、80386以降でも同様に使用できる。
386以降の(IA-32)プロセッサでは、レジスタアクセス命令にプレフィックスを付けることによって、リアルモードでも32ビットのレジスタアクセスは可能である。プロテクトモード移行の際などはリアルモードで特権レジスタを初期化して移行することになる。
386には、一旦プロテクトモードに移行してセグメントリミットを設定してから、リアルモードに復帰すると、そのセグメントリミットまでの実メモリ空間にリアルモードからアクセスが可能になるというバグのような動作がある。これはUnreal modeなどと呼ばれる。以降のすべてのプロセッサで有効となっており、幾つかのゲームソフトやDOSエクステンダで使われた。尚、BIOSにおいてのみ使用可能なシステムマネジメントモードは同様の全てのメモリ空間にアクセス可能な環境を提供する。
リアルモード
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/09/17 03:54 UTC 版)
リアルモードx86(8086、および80286以後のプロセッサのリアルモード)におけるプログラミングモデルでは、「セグメントレジスタ」と呼ばれるレジスタが存在するが、その振舞は上記で説明したアドレッシング手法とは全く異なる。また、メモリ保護や仮想アドレスは無い。 これらのプロセッサ、あるいはリアルモードにおけるプログラミングモデルでは、アドレス空間は20ビット(1MiB)だが、アドレスレジスタ幅や通常の命令フォーマットにおけるアドレス指定フィールドは16ビットであり、これらの値は「オフセット」と呼ばれる。また、セグメントレジスタの幅も16ビットである。そして「セグメントレジスタの値×16 + オフセット」が実アドレスとなり、1MiBの全アドレス空間へアクセスする機構が8086における「セグメント」と称されたものである。 8086にはCS/DS/SS/ESの4つの16ビットの「セグメントレジスタ」があり、メモリアクセスの種類に応じて暗黙のうちにセグメントレジスタが選択される。命令フェッチならCS、データの読み書きならDS、スタックへのアクセスならSSが選ばれる。以上のようなアクセス種別による暗黙の選択の他、セグメント・オーバーライド・プレフィックスという命令の前置修飾機能があり、どれかのセグメントレジスタを明示的に選択することもできる。
※この「リアルモード」の解説は、「セグメント方式」の解説の一部です。
「リアルモード」を含む「セグメント方式」の記事については、「セグメント方式」の概要を参照ください。
- リアルモードのページへのリンク