3

一部の古い x86 命令は、64 ビット モードでは未定義です。たとえばLDS、 、LESおよび、または( ) および( ) 命令LSSの短いオペコード。INC r1640 + rwINC r3240 + rd

64 ビット モードでのみ定義され、32 ビット プロテクト モードでは定義されていない命令はありますか?

編集: コンテキストはx86プロセッサの開発です。仕様に適合していることを確認したい。

4

6 に答える 6

5

32ビットに対応するものがないアドレッシングモードがあります:命令ポインタ相対アドレッシング。32ビットモードでは、これはブランチ(別名ブランチオフセット)でのみ使用できます。64ビットモードでは、(r)ipに関連する任意のメモリオペランドの実効アドレスを形成できます。

だから、指示

mov rbx,$100[rip]

x86-64には存在しますが、

mov ebx,$100[eip]

x86にはありません。

于 2009-10-05T13:10:09.877 に答える
4

Intel の Architectures Software Developer's Manual、Volume 2C Appendix A (Opcode Map) から:

表 A-1。オペコード テーブルで使用される上付き文字

...

o64命令は、64 ビット モードでのみ使用できます。

...

表を検索すると、次の指示がその上付き文字とともに表示されます。

  1. REX プレフィックス (実際には命令ではありませんが)
  2. MOVSXD
  3. SYSCALL、SYSRET
  4. スワップ

セクション 5.16 (64 ビットモード命令) に、既存の命令の変形であるいくつかの追加命令がリストされています。

  1. CDQE ダブルワードからクワッドワードへの変換
  2. CMPSQ 文字列オペランドの比較
  3. CMPXCHG16B RDX:RAX と m128 を比較
  4. LODSQ アドレス (R)SI の qword を RAX にロードする
  5. MOVSQ qword をアドレス (R)SI から (R)DI に移動します。
  6. MOVZX (64 ビット) ダブルワードをクワッドワードに移動、ゼロ拡張
  7. STOSQ アドレス RDI に RAX を格納
于 2012-09-17T10:50:02.353 に答える
3

現在64ビットレジスタで動作する古い命令(個別のバイナリ表現を使用するため、実際には新しい命令です)を別にすれば、64ビットのみの少なくとも2つの命令と命令を考えることができsyscallますsysret

于 2009-10-08T21:30:23.597 に答える
-1

反対の方がはるかに簡単に思いつきます;) cmpxchg8b のように .... 64 ビットモードでは決して使用しません。

于 2009-10-17T03:32:57.593 に答える
-1

http://www.intel.com/products/processor/index.htm?iid=dev_center+tech_hw_design+prods+processorsでさまざまなマニュアルを調べて、そのような手順をいつでも見つけることができます。大変な作業になります;)

于 2009-10-05T14:16:01.063 に答える
-1

PUSHA は 32 ビット モードでのみ存在します。64ビットモードでは存在しません

于 2012-09-16T15:21:06.087 に答える