一部の古い x86 命令は、64 ビット モードでは未定義です。たとえばLDS
、 、LES
および、または( ) および( ) 命令LSS
の短いオペコード。INC r16
40 + rw
INC r32
40 + rd
64 ビット モードでのみ定義され、32 ビット プロテクト モードでは定義されていない命令はありますか?
編集: コンテキストはx86プロセッサの開発です。仕様に適合していることを確認したい。
一部の古い x86 命令は、64 ビット モードでは未定義です。たとえばLDS
、 、LES
および、または( ) および( ) 命令LSS
の短いオペコード。INC r16
40 + rw
INC r32
40 + rd
64 ビット モードでのみ定義され、32 ビット プロテクト モードでは定義されていない命令はありますか?
編集: コンテキストはx86プロセッサの開発です。仕様に適合していることを確認したい。
32ビットに対応するものがないアドレッシングモードがあります:命令ポインタ相対アドレッシング。32ビットモードでは、これはブランチ(別名ブランチオフセット)でのみ使用できます。64ビットモードでは、(r)ipに関連する任意のメモリオペランドの実効アドレスを形成できます。
だから、指示
mov rbx,$100[rip]
x86-64には存在しますが、
mov ebx,$100[eip]
x86にはありません。
Intel の Architectures Software Developer's Manual、Volume 2C Appendix A (Opcode Map) から:
表 A-1。オペコード テーブルで使用される上付き文字
...
o64命令は、64 ビット モードでのみ使用できます。
...
表を検索すると、次の指示がその上付き文字とともに表示されます。
セクション 5.16 (64 ビットモード命令) に、既存の命令の変形であるいくつかの追加命令がリストされています。
現在64ビットレジスタで動作する古い命令(個別のバイナリ表現を使用するため、実際には新しい命令です)を別にすれば、64ビットのみの少なくとも2つの命令と命令を考えることができsyscall
ますsysret
。
反対の方がはるかに簡単に思いつきます;) cmpxchg8b のように .... 64 ビットモードでは決して使用しません。
http://www.intel.com/products/processor/index.htm?iid=dev_center+tech_hw_design+prods+processorsでさまざまなマニュアルを調べて、そのような手順をいつでも見つけることができます。大変な作業になります;)
PUSHA は 32 ビット モードでのみ存在します。64ビットモードでは存在しません