x64 の手順
ほとんどの x86 命令は、64 ビット モードの x64 で引き続き有効です。 使用頻度の低い一部の操作は、次のような 64 ビット モードではサポートされなくなりました。
2 進数でコーディングされた 10 進演算命令: AAA、AAD、AAM、AAS、DAA、DAS
BOUND
PUSHAD と POPAD
PUSH DS や POP DS など、セグメント レジスタを処理するほとんどの操作。 (FS または GS セグメント レジスターを使用する操作は、引き続き有効です)。
x64 命令セットには、SSE 2 など、x86 への最近の追加が含まれています。 x64 用にコンパイルされたプログラムは、次の手順を自由に使用できます。
データ転送
x64 は、64 ビット即時定数またはメモリ アドレスを処理できる MOV 命令の新しいバリアントを提供します。
MOV |
r,#n |
r = #n |
MOV |
rax, m |
64 ビット アドレスの内容を rax に移動します。 |
MOV |
m, rax |
rax の内容を 64 ビット アドレスに移動します。 |
x64 には、32 ビット オペランドを 64 ビットに符号拡張する新しい命令も用意されています。
MOVSXD |
r1, r/m |
符号拡張が付いた DWORD を QWORD に移動します。 |
32 ビット サブレジスタへの通常の MOV 操作では、自動的に 0 が 64 ビットに拡張されるため、MOVZXD 命令はありません。
2 つの SSE 命令を使用して、メモリから xmmn レジスタまたはその逆に 128 ビット値 (GUID など) を移動できます。
MOVDQA |
r1/m, r2/m |
128 ビット整列値を xmmn レジスタに、またはその逆に移動します。 |
MOVDQU |
r1/m, r2/m |
128 ビット値 (必ずしも整列されていない) をレジスタに移動するか、またはその逆に移動します。 |
データ変換
CDQE |
dword (eax) を qword (rax) に変換します。 |
CQO |
qword (rax) を oword (rdx:rax) に変換します。 |
文字列操作
MOVSQ |
rsi から rdi に qword を移動します。 |
CMPSQ |
rsi の qword と rdi を比較します。 |
SCASQ |
rdi で qword をスキャンします。 rdi の qword を rax と比較します。 |
LODSQ |
rsi から rax に qword を読み込みます。 |
STOSQ |
rax から rdi に qword を格納します。 |