2

64 ビット モードでは、デフォルトのアドレス サイズは 64 ビットです。アドレス サイズ オーバーライド プレフィックス (67h) が存在する場合、アドレス サイズは 32 ビットです。

正規の 64 ビット アドレスのビット 63 から実装されている最上位ビットまでがすべて 0 またはすべて 1 であるという事実を認識しています。32 ビット アドレス (64 ビット モードの命令に 67h をプレフィックスとして付けることで得られる) は、標準形式である必要がありますか? はいの場合、この正規形はどのように定義されていますか?

4

1 に答える 1

4

正規アドレスは、仮想アドレスの有効部分 (下位 48 ビット) を符号拡張することによって形成されます。最上位ビットは符号として扱われます。

これについて今推測しています(調べる気はありませんが、質問に答える必要はありません)-64ビットモードの32ビットアドレスには2つの考えられる動作があります。


  1. CPU はそれを 32 ビット レジスタ/オペランドの使用のように扱います。つまり、64 ビットにゼロ拡張する / 暗黙的に上位 32 ビットをゼロとして扱います0x00000000xxxxxxxx
  2. CPU はそれを「32 ビット有効」として扱い、32 ビット アドレスの最上位ビットから 64 ビットに符号拡張します
    。この場合も、320xffffffff80000000ビット範囲は...からマップされるため、32 ビット アドレスは標準的です0x000000007fffffff。これらはすべて正規のものです。

結果 (32 ビット アドレスは常に暗黙的に正規形式である) は同じであるため、CPU が実際に何を行うかは問題ではありません。32 ビット アドレスは正規の期間です。

于 2012-05-29T16:19:19.487 に答える