コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

Unreal mode

出典: フリー百科事典『ウィキペディア(Wikipedia)』

Unreal modeとはx86 CPUのリアルモードでは通常は設定できない32ビットのリミットなどを設定した状態のことである。 Unreal modeという名前ではあるがこれはx86の別のモードではなく、80286およびそれ以降のCPUで使用できる。

動作原理

[編集]

80286とそれ以降のx86 CPUは、効率的な動作のためにリアルモードであってもセグメントレジスタそのものではなく セグメントのデスクリプタキャッシュ内のベースアドレス、サイズ、その他の属性を使用する。 そのため、ディスクリプタキャッシュ内の値を変更すれば、リアルモードからアクセスできるメモリ領域を変更することができる。

80386以降のCPUではセグメントリミットを4GBに設定すればリアルモードのままで4GBのメモリにアクセスできる。 この手法は広く使われたため、80386以降のCPUでも使用可能である[1]。 しかし、Unreal modeはプロテクトモードのOSとは互換性がない。

Unreal modeを有効にする方法

[編集]

80286では、非公開命令のLOADALLを使用してセグメントデスクリプタ内のベースアドレスを変更することで16MBまでのメモリにアクセスできる。

80386でもLOADALL命令を使う手法は使用できるが、80486以降のx86ではLOADALLは廃止された。 80386ではLOADALLではなく別の手法を使うこともできる。一旦プロテクトモードに入り、リミットを4GBに設定したセレクタを 作成し、そのセレクタをセグメントレジスタにロードする。そのあとリアルモードに戻るとリミットが4GBのセグメントを使用できる。 アドレスサイズプリフィックスを使えば、リアルモードでもDS:[EBX]のように32ビットレジスタを指定することで0xFFFF(64KB)を超える メモリにアクセスできる。

脚注

[編集]
  1. ^ Cryptographic Security Architecture: Design and Verification. Springer Science & Business Media. (2004). p. 58. ISBN 978-0-387-95387-8. https://archive.org/details/springer_10.1007-b97264 2017年1月4日閲覧. "[…] Unreal mode became so widely used […] that Intel was forced to support it in all later processors, although its presence was never documented […]"