2

http://wiki.osdev.org/Unreal_Modeが言うように、大きなリアル モードでアドレス変換がどのように行われるかについていくつか質問があります。

アンリアル モードは、リアル モード セグメントの「64Kb」制限を破ることで構成されますが、ディスクリプタ キャッシュを微調整することで、16 ビットの命令とセグメント * 16 + オフセット アドレスの形成を維持します。

しかし、私の質問は、プロセスでgdtがどのように使用されるか、または線形アドレスへの変換中にまったく使用されるかです。ビッグ リアル モードに切り替えるための仕様やその他のリファレンスを誰かが指摘できれば、非常に役に立ちます。

よろしく、

アルカ

4

1 に答える 1

1

はい、最初に作成する必要があるため、GDTが使用されていると確信しています。ウィキペディアは次のように述べています。

80386 以降のマイクロプロセッサを非現実的なモードにするには、プログラムはまずプロテクト モードに入り、GDT または LDT でフラット記述子を検索または作成し、それぞれの保護モードの「セレクタ」でデータ セグメント レジスタの一部をロードしてから切り替える必要があります。リアルモードに戻ります。リアル モードに戻った後、プロセッサは保護モードで確立されたキャッシュ記述子を引き続き使用するため、リアル モードから 4 GiB の「拡張」メモリにアクセスできます。

80386 以降、リアル モード プログラムは、オペランド サイズ オーバーライド プレフィックスで 32 ビット レジスタを使用できます。これにより、プログラムは DS:[EAX] のようなアドレスを使用できます。通常のリアルモードでは、EAX が 0xFFFF を超えるとフォルトが発生します。Unreal モードでは、アクセスが許可されます。

補足として、あなたが提供したリンクは、非現実的なモードに入るのに十分なはずです。技術的には、非リアル モードとリアル モードが混在しているため、リアル モードに「戻る」ことはできません。おそらく、それらの唯一の大きな違いは、メモリをアドレス指定する能力です。リアル モードに「戻りたい」場合は、リアル モードで通常行うようにメモリをアドレス指定するだけです。

基本的に、違いを見分けるためにこれを覚えておく必要があります。

通常のリアルモードでは、EAX が 0xFFFF を超えるとフォルトが発生します。Unreal モードでは、アクセスが許可されます。

これが役立つことを願っています!

于 2015-07-26T18:40:24.247 に答える