オペコード (IA-32)
読み:オペコード
外語:opcode
IA-32
プロセッサーに対する命令を表わす番号。
目次
概要
特徴
基本構成
ModR/M
オペコード拡張
実数演算命令
SIMD命令
プリフィックス拡張
AVX
一覧
凡例
1バイトオペコード
0x
1x
2x
3x
4x
5x
6x
7x
8x
9x
Ax
Bx
Cx
Dx
Ex
Fx
ESC命令
D8
D9
DA
DB
DC
DD
DE
DF
0F拡張
0F 0x
0F 1x
0F 2x
0F 3x
0F 4x
0F 5x
0F 6x
0F 7x
0F 8x
0F 9x
0F Ax
0F Bx
0F Cx
0F Dx
0F Ex
0F Fx
66拡張
66 0F拡張
66 0F 1x
66 0F 2x
66 0F 38
66 0F 38 0x
66 0F 38 1x
66 0F 38 2x
66 0F 38 3x
66 0F 38 4x
66 0F 38 5x
66 0F 38 7x
66 0F 38 8x
66 0F 38 9x
66 0F 38 Ax
66 0F 38 Bx
66 0F 38 Dx
66 0F 38 Fx
66 0F 3A
66 0F 3A 0x
66 0F 3A 1x
66 0F 3A 2x
66 0F 3A 3x
66 0F 3A 4x
66 0F 3A 5x
66 0F 3A 6x
66 0F 3A 7x
66 0F 3A Dx
66 0F 5x
66 0F 6x
66 0F 7x
66 0F Cx
66 0F Dx
66 0F Ex
66 0F Fx
F2 0F拡張
F3 0F拡張
F3 0F 1x
F3 0F 2x
F3 0F 38
F3 0F 5x
F3 0F 6x
F3 0F 7x
F3 0F Ax
F3 0F Bx
F3 0F Cx
F3 0F Dx
F3 0F Ex
REX.W
概要
元々は
16ビットマイクロプロセッサー
として設計された
8086
で採用されたものが初出。
32ビット化されたことから若干の
仕様変更
が施されているが、基本的な設計方針は維持されている。
特徴
基本構成
IA-32オペコードの基本的な特徴は次の通りである。
可変長
命令を表わすオペコードに続き、必要に応じて
オペランド
を表わす
ModR/M
、更に必要に応じて
SIBバイト
、変位、即値、が続く
「オペランドを表わすバイト」は、ModR/M(Mode Register Memory)バイトと呼ばれ、独特の構造を取る
オペコードの前に
命令プリフィックス
を置き、命令を修飾したり、拡張したりする
ModR/M
ModR/M
(Mode Register Memory)バイトは、二つのソースの種類を表わすために使われる。
片方はレジスターに固定、もう片方はレジスターまたはメモリーが選択可能で、またレジスターを使う場合はオフセットを追加することができる。
7
6
5
4
3
2
1
0
mod
reg
r/m
modは、次のようにr/mの用途を切り替える。
mod=00: [レジスター+レジスター]
mod=01: [レジスター+disp8]
mod=10: [レジスター+disp16/32]
mod=11: レジスター
オペコード拡張
8086
/
80186
の後継として
80286
を作る際、追加する命令を符号化するだけのオペコードの空きがなかった。
そこで、Z80がED XXという2バイトで拡張命令を表現するように、80286も0F XXという2バイトで拡張命令を表現するようになった。
なお、0Fは、元々は8086/8088でpop csのオペコードに使われていた。しかし、このような命令はまず使用しないことから機能廃止、80286以降では命令のプリフィックスとして使われるようになった。
実数演算命令
8086の初期の設計では、実数演算は数値演算プロセッサーとしてCPUとは別のプロセッサー(コプロセッサー)として提供されていた。
このためオペコードも数字演算プロセッサー用の領域が専用に確保され、CPUの処理と分離されていた。
具体的には、D8HからDFHの範囲で、元々の8086のニーモニックは「ESC」とされていた。
現在の製品では機能が融合されておりシームレスに扱えるようになっており、
MMX
、
SSE
などの拡張も行なわれた。結果、オペコードの表現で不足する分は通常の命令と同様の書式による拡張方法で表現するようになっている。
SIMD命令
SSEの命令は0F XX XXという3バイトのものが多いが、これはSIMD命令用というわけではなく、IA-32における拡張方法の一つである。
これに更に66/F3/F2のプリフィックスを加えることにより、最大4種類に切り替わる。お互い全く無関係の命令になるというわけではなく、互いに相関性がある。従って、利用されるプリフィックスも66のみもあればF3/F2のみもあり、またプリフィックスの無いオペコードが未定義の命令もある。
具体的には、例えばaddpsは0F 58だが、バリエーションであるスカラーaddssはプリフィックスとしてF3が追加され、SSE2の倍精度命令はさらに66とF2が加わる。
** 基本となる単精度命令
F3 バリエーションの単精度命令
66 倍精度命令
F2 バリエーションの倍精度命令 (F3+66の機能)
プリフィックス拡張
こうして、IA-32では0F XXという2バイトエスケープ形式で命令は増やされたが、領域は枯渇寸前である。
SIMD命令で全てを埋めてしまうわけにはいかないので、
SSSE3
/
SSE 4.1
頃から0F 38 XX、SSE 4.1/
SSE 4.2
からイミディエイト付き命令用の0F 3A XXという3バイトエスケープ形式がそれぞれ導入された。
更に、新たに導入される
VEXプリフィックス
はこの問題の改善技術で、C5 XXまたはC4 XX XX形式で、
REXプリフィックス
の機能を取り込みながら、SSE/MMX命令をシンプルに記述できる。
AMDの
SSE5
も同様に0F 24/0F 25に続く3バイトオペコード方式を採用する予定だったが、AMDも
Intel AVX
を採用するために破棄された。
AVX
Intel AVX
でオペコードのエンコーディング方法が変更された。
SSEで、従来の128ビット
XMMレジスター
×8が、256ビット
YMMレジスター
×16に増強されている。
SSEの従来命令は殆どが
2オペランド命令
、たまに
3オペランド命令
だったが、AVXのエンコーディングを使うとオペランドが一つ増える。例えば、
addps xmm1, xmm2/m128
addps命令に対して、AVXの命令は次のようになる。
vaddps xmm1, xmm2, xmm3/m128
ニーモニックの頭にvを付けて区別する。オペランドが一つ増えるだけでなく、m256も可能になっている。この命令では、xmm2とxmm3またはm128(m256)の値を加算し、結果をxmm1に戻す。従って元の値は破壊されない。
一覧
凡例
これら以外については、各々で説明する。
/r ‐ ModR/Mがあることを表わす
/0…/7 ‐ ModR/Mのreg(ビット5〜3)の内容で命令を切り替える(mod≠11)
ib ‐ 1バイトのイミディエイト(imm8)
id ‐ 4バイトのイミディエイト(imm32) 16ビットモード、または66(オペランドサイズプリフィックス)併用時は2バイト(imm16)になる
cb ‐ 1バイトの相対アドレス(rel8) ジャンプ命令用
cd ‐ 4バイトの相対アドレス(rel8) ジャンプ命令用
1バイトオペコード
szと書かれた命令は、66プリフィックスによってサイズが変わるもの。
0x
00 /r : add r/m8 r8
01 /r sz : add r/m32 r32
02 /r : add r8 r/m8
03 /r sz : add r32 r/m32
04 ib : add al imm8
05 id sz : add eax imm32
06 : push es
07 : pop es
08 /r : or r/m8 r8
09 /r sz : or r/m32 r32
0A /r : or r8 r/m8
0B /r sz : or r32 r/m32
0C ib : or al imm8
0D id sz : or eax imm32
0E : push cs
0F : 拡張用、pop cs (8086のみ)
80286以降の拡張命令は、0Fから始まるオペコードで符号化される。
1x
10 /r : adc r/m8 r8
11 /r sz : adc r/m32 r32
12 /r : adc r8 r/m8
13 /r sz : adc r32 r/m32
14 ib : adc al imm8
15 id sz : adc eax imm32
16 : push ss
17 : pop ss
18 /r : sbb r/m8 r8
19 /r sz : sbb r/m32 r32
1A /r : sbb r8 r/m8
1B /r sz : sbb r32 r/m32
1C ib : sbb al imm8
1D id sz : sbb eax imm32
1E : push ds
1F : pop ds
2x
20 /r : and r/m8 r8
21 /r sz : and r/m32 r32
22 /r : and r8 r/m8
23 /r sz : and r32 r/m32
24 ib : and al imm8
25 id sz : and eax imm32
26 : セグメントオーバーライドプリフィックス ES:
27 : daa (IA-32まで、AMD64 ISA/Intel 64以降除く)
28 /r : sub r/m8 r8
29 /r sz : sub r/m32 r32
2A /r : sub r8 r/m8
2B /r sz : sub r32 r/m32
2C ib : sub al imm8
2D id sz : sub eax imm32
2E : セグメントオーバーライドプリフィックス CS:
2F : das (IA-32まで、AMD64 ISA/Intel 64以降除く)
3x
30 /r : xor r/m8 r8
31 /r sz : xor r/m32 r32
32 /r : xor r8 r/m8
33 /r sz : xor r32 r/m32
34 ib : xor al imm8
35 id sz : xor eax imm32
36 : セグメントオーバーライドプリフィックス SS:
37 : aaa (IA-32まで、AMD64 ISA/Intel 64以降除く)
38 /r : cmp r/m8 r8
39 /r sz : cmp r/m32 r32
3A /r : cmp r8 r/m8
3B /r sz : cmp r32 r/m32
3C ib : cmp al imm8
3D id sz : cmp eax imm32
3E : セグメントオーバーライドプリフィックス DS:
3F : aas (IA-32まで、AMD64 ISA/Intel 64以降除く)
4x
4XはIA-64では
REXプリフィックス
となるため使用できない。
40 sz : inc eax
41 sz : inc ecx
42 sz : inc edx
43 sz : inc ebx
44 sz : inc esp
45 sz : inc ebp
46 sz : inc esi
47 sz : inc edi
48 sz : dec eax
49 sz : dec ecx
4A sz : dec edx
4B sz : dec ebx
4C sz : dec esp
4D sz : dec ebp
4E sz : dec esi
4F sz : dec edi
2バイトになるが、incはFF /0、decはFF /1でも表現できる。
5x
50 sz : push eax
51 sz : push ecx
52 sz : push edx
53 sz : push ebx
54 sz : push esp
55 sz : push ebp
56 sz : push esi
57 sz : push edi
58 sz : pop eax
59 sz : pop ecx
5A sz : pop edx
5B sz : pop ebx
5C sz : pop esp
5D sz : pop ebp
5E sz : pop esi
5F sz : pop edi
6x
60 sz : pushad/pusha
61 sz : popad/popa
62
62 /r sz : bound r32 m32&32 (IA-32まで、AMD64 ISA/Intel 64以降除く)
62 :
EVEXプリフィックス
(Intel 64以降)
63 /r : arpl r/m16 r16 (IA-32まで、AMD64 ISA/Intel 64以降除く)
64 : セグメントオーバーライドプリフィックス FS:
65 : セグメントオーバーライドプリフィックス GS:
66 : オペランドサイズプリフィックス
67 : アドレスサイズプリフィックス
68 id sz : push imm32
69 /r id sz : imul r32 r/m32 imm32
6A ib : push imm8
6B /r ib sz : imul r32 r/m32 imm8
6C : insb
6D sz : insd/insw
6E : outsb
6F sz : outsd/outsw
7x
70 cb : jo rel8
71 cb : jno rel8
72 cb : jb rel8
73 cb : jae rel8
74 cb : jz rel8
75 cb : jnz rel8
76 cb : jbe rel8
77 cb : ja rel8
78 cb : js rel8
79 cb : jns rel8
7A cb : jp rel8
7B cb : jnp rel8
7C cb : jl rel8
7D cb : jge rel8
7E cb : jle rel8
7F cb : jg rel8
cbは8ビットのオフセット。$+2。
条件には別名がいくつかある。例えばjbは、jc、jnaeでも良い。
8x
ibは1バイト、1dは4バイトの
イミディエイト
を表わす。
80
80 /0 ib : add r/m8 imm8
80 /1 ib : or r/m8 imm8
80 /2 ib : adc r/m8 imm8
80 /3 ib : sbb r/m8 imm8
80 /4 ib : and r/m8 imm8
80 /5 ib : sub r/m8 imm8
80 /6 ib : xor r/m8 imm8
80 /7 ib : cmp r/m8 imm8
81
81 /0 id sz : add r/m32 imm32
81 /1 id sz : or r/m32 imm32
81 /2 id sz : adc r/m32 imm32
81 /3 id sz : sbb r/m32 imm32
81 /4 id sz : and r/m32 imm32
81 /5 id sz : sub r/m32 imm32
81 /6 id sz : xor r/m32 imm32
81 /7 ib sz : cmp r/m32 imm32
82 = 80と同じ (IA-32まで、AMD64 ISA/Intel 64以降除く)
83
83 /0 ib sz : add r/m32 imm8
83 /1 ib sz : or r/m32 imm8
83 /2 ib sz : adc r/m32 imm8
83 /3 ib sz : sbb r/m32 imm8
83 /4 ib sz : and r/m32 imm8
83 /5 ib sz : sub r/m32 imm8
83 /6 ib sz : xor r/m32 imm8
83 /7 ib sz : cmp r/m32 imm8
84 /r : test r/m8 r8
85 /r sz : test r/m32 r32
86 /r : xchg r8 r/m8
87 /r sz : xchg r32 r/m32
88 /r : mov r/m8 r8
89 /r sz : mov r/m32 r32
8A /r : mov r8 r/m8
8B /r sz : mov r32 r/m32
8C /r : mov r/m16 sreg
8D /r sz : lea r32 m
8E /r : mov sreg r/m16
8F
8F /0 sz : pop r/m32
8F /1 :
XOPプリフィックス
8F /2 : XOPプリフィックス
8F /3 : XOPプリフィックス
8F /5 : XOPプリフィックス
8F /6 : XOPプリフィックス
8F /7 : XOPプリフィックス
9x
90 : nop
91 sz : xchg eax,ecx
92 sz : xchg eax,edx
93 sz : xchg eax,ebx
94 sz : xchg eax,esp
95 sz : xchg eax,ebp
96 sz : xchg eax,esi
97 sz : xchg eax,edi
98 sz : cwde/cbw
99 sz : cdq/cwd
9A cp sz : call ptr16:32
9B : wait/fwait
9B D9 /6 : fstenv m14/28byte
9B D9 /7 : fstcw m2byte
9B DB E0 : feni
9B DB E1 : fdisi
9B DB E2 : fclex
9B DB E3 : finit
9B DD /6 : fsave m32 m94/108byte
9B DD /7 : fstsw m2byte
9B DF E0 : fstsw ax
9C sz : pushf(16ビット)/pushfd(32ビット)/pushfq(64ビット)
9D sz : popf(16ビット)/popfd(32ビット)/popfq(64ビット)
9E : sahf
9F : lahf
Ax
A0 : mov al moffs8
A1 sz : mov eax moffs32
A2 : mov moffs8 al
A3 sz : mov moffs32 eax
A4 : movsb
A5 sz : movsd/movsw
A6 : cmpsb
A7 sz : cmpsd/cmpsw
A8 ib : test al imm8
A9 id sz : test eax imm32
AA : stosb
AB sz : stosd/stosw
AC : lodsb
AD sz : lodsd/lodsw
AE : scasb
AF sz : scasd/scasw
Bx
B0 ib : mov al imm8
B1 ib : mov cl imm8
B2 ib : mov dl imm8
B3 ib : mov bl imm8
B4 ib : mov ah imm8
B5 ib : mov ch imm8
B6 ib : mov dh imm8
B7 ib : mov bh imm8
B8 id sz : mov eax imm32
B9 id sz : mov ecx imm32
BA id sz : mov edx imm32
BB id sz : mov ebx imm32
BC id sz : mov esp imm32
BD id sz : mov ebp imm32
BE id sz : mov esi imm32
BF id sz : mov edi imm32
Cx
C0
C0 /0 ib : rol r/m8 imm8
C0 /1 ib : ror r/m8 imm8
C0 /2 ib : rcl r/m8 imm8
C0 /3 ib : rcr r/m8 imm8
C0 /4 ib : sal r/m8 imm8
C0 /4 ib : shl r/m8 imm8
C0 /5 ib : shr r/m8 imm8
C0 /6 ib = salとして動作する
C0 /7 ib : sar r/m8 imm8
C1
C1 /0 ib sz : rol r/m32 imm8
C1 /1 ib sz : ror r/m32 imm8
C1 /2 ib sz : rcl r/m32 imm8
C1 /3 ib sz : rcr r/m32 imm8
C1 /4 ib sz : sal r/m32 imm8
C1 /4 ib sz : shl r/m32 imm8
C1 /5 ib sz : shr r/m32 imm8
C1 /6 ib sz = salとして動作する
C1 /7 ib sz : sar r/m32 imm8
C2 id sz : ret imm32
C3 : ret
C4
C4 /r sz : les r32 m16:32 (IA-32まで、AMD64 ISA/Intel 64以降除く)
C4 /r : [mod=11]
VEXプリフィックス
(Intel AVX + IA-32)
C4 /r : [mod≠11] VEXプリフィックス (Intel AVX + AMD64 ISA/Intel 64)
C5
C5 /r sz : lds r32 m16:32 (IA-32まで、AMD64 ISA/Intel 64以降除く)
C5 /r : [mod=11] VEXプリフィックス (Intel AVX + IA-32)
C5 /r : [mod≠11] VEXプリフィックス (Intel AVX + AMD64 ISA/Intel 64)
C6
C6 /0 ib : mov r/m8 imm8
C6 /7 ib : xabort imm8
C7
C7 /0 id sz : mov r/m32 imm32
C7 /7 id : xbegin imm32
C8 iw ib : enter imm16 imm8
C9 sz : leave
CA id sz : retf imm32
CB : retf
CC : int #3
CD ib : int imm8
CE : into
CF sz : iret/iretd
Dx
D0
D0 /0 : rol r/m8 #1
D0 /1 : ror r/m8 #1
D0 /2 : rcl r/m8 #1
D0 /3 : rcr r/m8 #1
D0 /4 : sal r/m8
D0 /4 : shl r/m8
D0 /5 : shr r/m8
D0 /6 = salとして動作する
D0 /7 : sar r/m8
D1
D1 /0 sz : rol r/m32 #1
D1 /1 sz : ror r/m32 #1
D1 /2 sz : rcl r/m32 #1
D1 /3 sz : rcr r/m32 #1
D1 /4 sz : sal r/m32
D1 /4 sz : shl r/m32
D1 /5 sz : shr r/m32
D1 /6 sz = salとして動作する
D1 /7 sz : sar r/m32
D2
D2 /0 : rol r/m8 cl
D2 /1 : ror r/m8 cl
D2 /2 : rcl r/m8 cl
D2 /3 : rcr r/m8 cl
D2 /4 : sal r/m8 cl
D2 /4 : shl r/m8 cl
D2 /5 : shr r/m8 cl
D2 /6 = salとして動作する
D2 /7 : sar r/m8 cl
D3
D3 /0 sz : rol r/m32 cl
D3 /1 sz : ror r/m32 cl
D3 /2 sz : rcl r/m32 cl
D3 /3 sz : rcr r/m32 cl
D3 /4 sz : sal r/m32 cl
D3 /4 sz : shl r/m32 cl
D3 /5 sz : shr r/m32 cl
D3 /6 sz = salとして動作する
D3 /7 sz : sar r/m32 cl
D4 ib : aam imm8 (IA-32まで、AMD64 ISA/Intel 64以降除く)
D5 ib : aad imm8 (IA-32まで、AMD64 ISA/Intel 64以降除く)
D6 : setalc (IA-32まで、AMD64 ISA/Intel 64以降除く)
D7 : xlatb
D8 : esc0 FPU用命令プリフィックス
D9 : esc1 FPU用命令プリフィックス
DA : esc2 FPU用命令プリフィックス
DB : esc3 FPU用命令プリフィックス
DC : esc4 FPU用命令プリフィックス
DD : esc5 FPU用命令プリフィックス
DE : esc6 FPU用命令プリフィックス
DF : esc7 FPU用命令プリフィックス
Ex
E0 cb : loopne rel8/loopnz rel8
E1 cb : loope rel8/loopz rel8
E2 cb : loop rel8
E3 cb : jcxz rel8(16ビット)/jecxz rel8(32ビット)/jrcxz rel8(64ビット)
E4 ib : in al imm8
E5 ib sz : in eax imm8
E6 ib : out imm8 al
E7 ib sz : out imm8 eax
E8 cd : call rel16(16ビット)/call rel32(32ビット)
E9 cd : jmp rel16(16ビット)/jmp rel32(32ビット)
EA cp : jmp ptr16:16(16ビット)/jmp ptr16:32(32ビット)
EB cb : jmp rel8
EC : in al dx
ED sz : in eax dx
EE : out dx al
EF sz : out dx eax
Fx
F0 : lock
F1 : icebp
F2 : repne
F2 0F : SSE拡張命令プリフィックス
F2 F0 : xaquire + lock
F3 : rep
F3 0F : SSE拡張命令プリフィックス
F3 90 : pause
F3 F0 : xrelease + lock
F4 : hlt
F5 : cmc
F6
F6 /0 ib : test r/m8 imm8
F6 /1 = F6 /0 と同じ動作
F6 /2 : not r/m8
F6 /3 : neg r/m8
F6 /4 : mul r/m8
F6 /5 : imul r/m8
F6 /6 : div r/m8
F6 /7 : idiv r/m8
F7
F7 /0 id sz : test r/m32 imm32
F7 /1 = F7 /0 と同じ動作
F7 /2 sz : not r/m32
F7 /3 sz : neg r/m32
F7 /4 sz : mul r/m32
F7 /5 sz : imul r/m32
F7 /6 sz : div r/m32
F7 /7 sz : idiv r/m32
F8 : clc
F9 : stc
FA : cli
FB : sti
FC : cld
FD : std
FE
FE /0 : inc r/m8
FE /1 : dec r/m8
FF
FF /0 sz : inc r/m32
FF /1 sz : dec r/m32
FF /2 sz : call r/m32
FF /3 sz : call m16:32
FF /4 sz : jmp r/m32
FF /5 sz : jmp m16:32
FF /6 sz : push r/m32
ESC命令
ESC命令は、1バイト目がD8からDFまでの命令をいう。数値演算プロセッサー(
FPU
)用の命令がここに配置されている。
D8
D8 /0 : fadd m32fp
D8 /1 : fmul m32fp
D8 /2 : fcom m32fp
D8 /3 : fcomp m32fp
D8 /4 : fsub m32fp
D8 /5 : fsubr m32fp
D8 /6 : fdiv m32fp
D8 /7 : fdivr m32fp
D8 C0+i : fadd st st(i)
D8 C8+i : fmul st st(i)
D8 D0+i : fcom st(i)
D8 D8+i : fcomp st(i)
D8 E0+i : fsub st st(i)
D8 E8+i : fsubr st st(i)
D8 F0+i : fdiv st st(i)
D8 F8+i : fdivr st st(i)
D9
D9 /0 : fld m32fp
D9 /2 : fst m32fp
D9 /3 : fstp m32fp
D9 /4 : fldenv m14/28byte
D9 /5 : fldcw m2byte
D9 /6 : fnstenv m14/28byte
D9 /7 : fnstcw m2byte
D9 C0+i : fld st(i)
D9 C8+i : fxch st(i)
D9 D0 : fnop
D9 E0 : fchs
D9 E1 : fabs
D9 E4 : ftst
D9 E5 : fxam
D9 E8 : fld1
D9 E9 : fldl2t
D9 EA : fldl2e
D9 EB : fldpi
D9 EC : fldlg2
D9 ED : fldln2
D9 EE : fldz
D9 F0 : f2xm1
D9 F1 : fyl2x
D9 F2 : fptan
D9 F3 : fpatan
D9 F4 : fxtract
D9 F5 : fprem1
D9 F6 : fdecstp
D9 F7 : fincstp
D9 F8 : fprem
D9 F9 : fyl2xp1
D9 FA : fsqrt
D9 FB : fsincos
D9 FC : frndint
D9 FD : fscale
D9 FE : fsin
D9 FF : fcos
DA
DA /0 : fiadd m32int
DA /1 : fimul m32int
DA /2 : ficom m32int
DA /3 : ficomp m32int
DA /4 : fisub m32int
DA /5 : fisubr m32int
DA /6 : fidiv m32int
DA /7 : fidivr m32int
DA C0+i : fcmovb st st(i)
DA C8+i : fcmove st st(i)
DA D0+i : fcmovbe st st(i)
DA D8+i : fcmovbu st st(i)
DA E9 : fucompp
DB
DB /0 : fild m32int
DB /2 : fist m32int
DB /3 : fistp m32int
DB /5 : fld m80fp
DB /7 : fstp m80fp
DB E2 : fnclex
DB E3 : fninit
DB E8+i : fucomi st st(i)
DB F0+i : fcomi st st(i)
DC
DC /0 : fadd m64fp
DC /1 : fmul m64fp
DC /2 : fcom m64fp
DC /3 : fcomp m64fp
DC /4 : fsub m64fp
DC /5 : fsubr m64fp
DC /6 : fdiv m64fp
DC /7 : fdivr m64fp
DC C0+i : fadd st(i) st
DC C8+i : fmul st(i) st
DC E0+i : fsubr st(i) st
DC E8+i : fsub st(i) st
DC F0+i : fdivr st(i) st
DC F8+i : fdiv st(i) st
DD
DD /0 : fld m64fp
DD /2 : fst m64fp
DD /3 : fstp m64fp
DD /4 : frstor m94/108byte
DD /6 : fnsave m32 m94/108byte
DD /7 : fnstsw m2byte
DD C0+i : ffree st(i)
DD D0+i : fst st(i)
DD D8+i : fstp st(i)
DD E0+i : fucom st(i)
DD E8+i : fucomp st(i)
DE
DE /0 : fiadd m16int
DE /1 : fimul m16int
DE /2 : ficom m16int
DE /3 : ficomp m16int
DE /4 : fisub m16int
DE /5 : fisubr m16int
DE /6 : fidiv m16int
DE /7 : fidivr m16int
DE C0+i : faddp st(i) st
DE C8+i : fmulp st(i) st
DE D9 : fcompp
DE E0+i : fsubrp st(i) st
DE E8+i : fsubp st(i) st
DE F0+i : fdivrp st(i) st
DE F8+i : fdivp st(i) st
DF
DF /0 : fild m16int
DF /2 : fist m16int
DF /3 : fistp m16int
DF /4 : fbld m80 dec
DF /5 : fild m64int
DF /6 : fbstp m80bcd
DF /7 : fistp m64int
DF E0 : fnstsw ax
DF E8+i : fucomip st st(i)
DF F0+i : fcomip st st(i)
0F拡張
[※AVX]が附された命令は、VEXプリフィックスを使って符号化するものであり、参考として記されたもの。記載されたオペコードでは処理できない。
オペコードは「インテル Advanced Vector Extensions プログラミング・リファレンス 2010年4月」を基本に、いくつかの未記載の命令を加えている。
特に明記しないが、この領域は、SSE命令が大多数を占めている。
0F 0x
0F 00
0F 00 /0 sz : sldt r32
0F 00 /1 : str r/m16
0F 00 /2 : lldt r/m16
0F 00 /3 : ltr r/m16
0F 00 /4 : verr r/m16
0F 00 /5 : verw r/m16
0F 01
0F 01 /0 : sgdt m
0F 01 /1 : sidt m
0F 01 /2 : lgdt m16&32
0F 01 /3 : lidt m16&32
0F 01 /4 sz : smsw r32/m16
0F 01 /6 : lmsw r/m16
0F 01 /7 : invlpg m
0F 01 C1 : vmcall
0F 01 C2 : vmlaunch
0F 01 C3 : vmresume
0F 01 C4 : vmxoff
0F 01 C8 : monitor
0F 01 C9 : mwait
0F 01 CA : clac
0F 01 CB : stac
0F 01 D0 : xgetbv
0F 01 D1 : xsetbv
0F 01 D4 : vmfunc
0F 01 D5 : xend
0F 01 D6 : xtest
0F 01 D8 : vmrun
0F 01 D9 : vmmcall
0F 01 DA : vmload
0F 01 DB : vmsave
0F 01 DC : stgi
0F 01 DD : clgi
0F 01 DE : skinit
0F 01 DF : invlpga
0F 01 F8 : swapgs
0F 01 F9 : rdtscp
0F 02 /r sz : lar r32 r/m32
0F 03 /r sz : lsl r32 r/m32
0F 04
0F 05 : (80286)loadall、(AMD)
syscall
0F 06 : clts
0F 07 : (i386)loadall、(AMD)sysret
0F 08 : invd
0F 09 : wbinvd
0F 0A
0F 0B : ud2、ud2a
0F 0C
0F 0D XX : 3DNow!命令拡張 [3DNow!]
0F 0D /0 prefetch mem8
0F 0D /1 prefetchw mem8
0F 0E : femms [3DNow!]
0F 0F XX : 3DNow!命令拡張 [3DNow!]
0F 0F 0C /r : pi2fw mm mm/m64 (Enhanced 3DNow!)
0F 0F 0D /r : pi2fd mm mm/m64
0F 0F 1C /r : pf2iw mm mm/m64 (Enhanced 3DNow!)
0F 0F 1D /r : pf2id mm mm/m64
0F 0F 8A /r : pfnacc mm mm/m64 (Enhanced 3DNow!)
0F 0F 8E /r : pfpnacc mm mm/m64 (Enhanced 3DNow!)
0F 0F 90 /r : pfcmpge mm mm/m64
0F 0F 94 /r : pfmin mm mm/m64
0F 0F 96 /r : pfrcp mm mm/m64
0F 0F 97 /r : pfrsqrt mm mm/m64
0F 0F 9A /r : pfsub mm mm/m64
0F 0F 9E /r : pfadd mm mm/m64
0F 0F A0 /r : pfcmpgt mm mm/m64
0F 0F A4 /r : pfmax mm mm/m64
0F 0F A6 /r : pfrcpit1 mm mm/m64
0F 0F A7 /r : pfrsqit1 mm mm/m64
0F 0F AA /r : pfsubr mm mm/m64
0F 0F AE /r : pfacc mm mm/m64
0F 0F B0 /r : pfcmpeq mm mm/m64
0F 0F B4 /r : pfmul mm mm/m64
0F 0F B6 /r : pfrcpit2 mm mm/m64
0F 0F B7 /r : pmulhrw mm mm/m64
0F 0F B8 /r : pswapd mm mm/m64 (Enhanced 3DNow!)
0F 0F BF /r : pavgusb mm mm/m64
3DNow!の命令は、現在のAMDのプロセッサーでも廃止されており、prefetch/prefetchw命令以外は削除されている。
0F 1x
0F 10 /r : movups xmm xmm/m128
0F 11 /r : movups xmm/m128 xmm
0F 12 /r : movhlps xmm xmm
0F 13 /r : movlps m64 xmm
0F 14 /r : unpcklps xmm xmm/m128
0F 15 /r : unpckhps xmm xmm/m128
0F 16 /r : movhps xmm m64
0F 17 /r : movhps m64 xmm
0F 18
0F 18 /0 : [mod≠11] prefetchnta m8
0F 18 /1 : [mod≠11] prefetcht0 m8
0F 18 /2 : [mod≠11] prefetcht1 m8
0F 18 /3 : [mod≠11] prefetcht2 m8
0F 18 /4 : hint_nop r/m32
0F 18 /5 : hint_nop r/m32
0F 18 /6 : hint_nop r/m32
0F 18 /7 : hint_nop r/m32
0F 19 xx : hint_nop r/m32
0F 1A xx : hint_nop r/m32
0F 1B xx : hint_nop r/m32
0F 1C xx : hint_nop r/m32
0F 1D xx : hint_nop r/m32
0F 1E xx : hint_nop r/m32
0F 1F
0F 1F /0 : nop r/m32
0F 1F /1 : hint_nop r/m32
0F 1F /2 : hint_nop r/m32
0F 1F /3 : hint_nop r/m32
0F 1F /4 : hint_nop r/m32
0F 1F /5 : hint_nop r/m32
0F 1F /6 : hint_nop r/m32
0F 1F /7 : hint_nop r/m32
*ps命令に対し、66を付けると*pd命令、F3を付けると*ss命令、F2を付けると*sd命令になる。
nop r/m32は、3から9バイト長までの
NOP
である。
REXプリフィックス
を併用すると10バイト以上も可能と見込まれる。
hint_nopはundocumentedな命令で非公式なニーモニック。nop r/m32と同様の動作をするものと思われる。量が多いので、単に #UD 例外を出すのをサボっているだけとも思われるが、詳細不明。
0F 2x
0F 20 /r : mov r32 cr
0F 21 /r : mov r32 dr
0F 22 /r : mov cr r32
0F 23 /r : mov dr r32
0F 24 /r : mov r32 tr
0F 25 : SSE5命令拡張(キャンセル)
0F 26 /r : mov tr r32
0F 27 : SSE5命令拡張(キャンセル)
0F 28 /r : movaps xmm xmm/m128
0F 29 /r : movaps xmm/m128 xmm
0F 2A /r : cvtpi2ps xmm mm/m64
0F 2B /r : movntps m128 xmm
0F 2C /r : cvttps2pi mm xmm/m64
0F 2D /r : cvtps2pi mm xmm/m64
0F 2E /r : ucomiss xmm xmm/m32
0F 2F /r : comiss xmm xmm/m32
0F 3x
VEX命令のr32 r/m32は、
VEX.W
=1にすることでr64 r/m64命令に切り替わる。
0F 30 : wrmsr
0F 31 :
rdtsc
0F 32 :
rdmsr
0F 33 : rdpmc
0F 34 :
sysenter
0F 35 : sysexit
0F 36
0F 37 : getsec
0F 38 : SSE命令拡張(イミディエイトなし命令)
0F 38 00 /r : pshufb mm mm/m64
0F 38 01 /r : phaddw mm mm/m64
0F 38 02 /r : phaddd mm mm/m64
0F 38 03 /r : phaddsw mm mm/m64
0F 38 04 /r : pmaddubsw mm mm/m64
0F 38 05 /r : phsubw mm mm/m64
0F 38 06 /r : phsubd mm mm/m64
0F 38 07 /r : phsubsw mm mm/m64
0F 38 08 /r : psignb mm mm/m64
0F 38 09 /r : psignw mm mm/m64
0F 38 0A /r : psignd mm mm/m64
0F 38 0B /r : pmulhrsw mm mm/m64
0F 38 1C /r : pabsb mm mm/m64
0F 38 1D /r : pabsw mm mm/m64
0F 38 1E /r : pabsd mm mm/m64
0F 38 F0 /r sz : movbe r32 r/m32 (Atom)
0F 38 F1 /r sz : movbe m32 r32 (Atom)
0F 38 F2 : [※VEX] andn r32 r32 r/m32
0F 38 F3 /1 : [※VEX] blsr r32 r/m32
0F 38 F3 /2 : [※VEX] blsmsk r32 r/m32
0F 38 F3 /3 : [※VEX] blsi r32 r/m32
0F 38 F5 : [※VEX] bzhi r32 r/m32 r32
0F 38 F7 : [※VEX] bextr r32 r/m32 r32
0F 39
0F 3A : SSE命令拡張(イミディエイト付き命令)
0F 3A 0F /r ib : palignr xmm xmm/m128 imm8
0F 3B
0F 3C
0F 3D
0F 3E
0F 3F
0F 4x
0F 40 /r sz : cmovo r32 r/m32
0F 41 /r sz : cmovno r32 r/m32
0F 42 /r sz : cmovb r32 r/m32
0F 43 /r sz : cmovae r32 r/m32
0F 44 /r sz : cmovz r32 r/m32
0F 45 /r sz : cmovnz r32 r/m32
0F 46 /r sz : cmovbe r32 r/m32
0F 47 /r sz : cmova r32 r/m32
0F 48 /r sz : cmovs r32 r/m32
0F 49 /r sz : cmovns r32 r/m32
0F 4A /r sz : cmovp r32 r/m32
0F 4B /r sz : cmovnp r32 r/m32
0F 4C /r sz : cmovl r32 r/m32
0F 4D /r sz : cmovge r32 r/m32
0F 4E /r sz : cmovle r32 r/m32
0F 4F /r sz : cmovg r32 r/m32
条件には別名がいくつかある。例えばcmovbは、cmovc、cmovnaeでも良い。
0F 5x
0F 50 /r : movmskps r32 xmm
0F 51 /r : sqrtps xmm xmm/m128
0F 52 /r : rsqrtps xmm xmm/m128
0F 53 /r : rcpps xmm xmm/m128
0F 54 /r : andps xmm xmm/m128
0F 55 /r : andnps xmm xmm/m128
0F 56 /r : orps xmm xmm/m128
0F 57 /r : xorps xmm xmm/m128
0F 58 /r : addps xmm xmm/m128
0F 59 /r : mulps xmm xmm/m128
0F 5A
0F 5B /r : cvtdq2pd xmm xmm/m128
0F 5C /r : subps xmm xmm/m128
0F 5D /r : minps xmm xmm/m128
0F 5E /r : divps xmm xmm/m128
0F 5F /r : maxps xmm xmm/m128
*ps命令に対し、66を付けると*pd命令、F3を付けると*ss命令、F2を付けると*sd命令になる。
0F 6x
0F 60 /r : punpcklbw mm mm/m32
0F 61 /r : punpcklwd mm mm/m32
0F 62 /r : punpckldq mm mm/m32
0F 63 /r : packsswb mm mm/m64
0F 64 /r : pcmpgtb mm mm/m64
0F 65 /r : pcmpgtw mm mm/m64
0F 66 /r : pcmpgtd mm mm/m64
0F 67 /r : packuswb mm mm/m64
0F 68 /r : punpckhbw mm mm/m64
0F 69 /r : punpckhwd mm mm/m64
0F 6A /r : punpckhdw mm mm/m64
0F 6B /r : packssdw mm mm/m64
0F 6C
0F 6D
0F 6E /r : movd mm r/m32
0F 6F /r : movq mm mm/m64
mm mm/m32またはmm mm/m64の命令に66をつけると、xmm xmm/m128の命令になる。
0F 7x
0F 70 /r ib : pshufw mm mm/m64 imm8
0F 71
0F 71 /2 ib : psrlw mm imm8
0F 71 /4 ib : psraw mm imm8
0F 71 /6 ib : psllw mm imm8
0F 72
0F 72 /2 ib : psrld mm imm8
0F 72 /4 ib : psrad mm imm8
0F 72 /6 ib : pslld mm imm8
0F 73
0F 73 /2 ib : psrlq mm imm8
0F 73 /6 ib : psllq mm imm8
0F 74 /r : pcmpeqb mm mm/m64
0F 75 /r : pcmpeqw mm mm/m64
0F 76 /r : pcmpeqd mm mm/m64
0F 77 : [※AVX] emms
0F 78 sz : vmread r/m32 r32
0F 79 sz : vmwrite r32 r/m32
0F 7A : SSE5命令拡張(キャンセル)
0F 7B : SSE5命令拡張(キャンセル)
0F 7C
0F 7D
0F 7E /r : movd r/m32 mm
0F 7F /r : movq mm/m64 mm
mm imm8の命令に66をつけると、xmm imm8の命令になる。
0F 8x
0F 80 cd sz : jo rel32
0F 81 cd sz : jno rel32
0F 82 cd sz : jb rel32
0F 83 cd sz : jae rel32
0F 84 cd sz : jz rel32
0F 85 cd sz : jnz rel32
0F 86 cd sz : jbe rel32
0F 87 cd sz : ja rel32
0F 88 cd sz : js rel32
0F 89 cd sz : jns rel32
0F 8A cd sz : jp rel32
0F 8B cd sz : jnp rel32
0F 8C cd sz : jl rel32
0F 8D cd sz : jge rel32
0F 8E cd sz : jle rel32
0F 8F cd sz : jg rel32
cdは32ビットのオフセット。$+6。
条件には別名がいくつかある。例えばjbは、jc、jnaeでも良い。
0F 9x
0F 90 : seto r/m8
0F 91 : setno r/m8
0F 92 : setb r/m8
0F 93 : setae r/m8
0F 94 : setz r/m8
0F 95 : setnz r/m8
0F 96 : setbe r/m8
0F 97 : seta r/m8
0F 98 : sets r/m8
0F 99 : setns r/m8
0F 9A : setp r/m8
0F 9B : setnp r/m8
0F 9C : setl r/m8
0F 9D : setge r/m8
0F 9E : setle r/m8
0F 9F : setg r/m8
条件には別名がいくつかある。例えばsetbは、setc、setnaeでも良い。
0F Ax
0F A0 : push fs
0F A1 : pop fs
0F A2 :
cpuid
0F A3 /r sz : bt r/m32 r32
0F A4 /r ib sz : shld r/m32 r32 imm8
0F A5 /r sz : shld r/m32 r32 cl
0F A6
0F A7
0F A8 : push gs
0F A9 : pop gs
0F AA : rsm
0F AB /r sz : bts r/m32 r32
0F AC /r ib sz : shrd r/m32 r32 imm8
0F AD /r sz : shrd r/m32 r32 cl
0F AE
0F AE /0 : fxsave m512byte
0F AE /1 : fxrstor m512byte
0F AE /2 : ldmxcsr m32
0F AE /3 : stmxcsr m32
0F AE /4 : xsave m
0F AE /5 : [mod≠11] lfence
0F AE /5 : [mod=11] xrstor m
0F AE /6 : [mod≠11] xsaveopt
0F AE /6 : [mod=11] mfence
0F AE /7 : [mod≠11] clflush m8
0F AE /7 : [mod=11] sfence
0F AF /r sz : imul r32 r/m32
0F Bx
0F B0 /r : chmpxchg r/m8 r8
0F B1 /r sz : chmpxchr r/m32 r32
0F B2 /r sz : lss r32 m16:32
0F B3 sz : btr r/m32 r32
0F B4 /r sz : lfs r32 m16:32
0F B5 /r sz : lgs r32 m16:32
0F B6 /r sz : movzx r32 r/m8
0F B7 /r : movzx r32 r/m16
0F B8 : jmpe
0F B9 : ud2b、ud1
0F BA
0F BA /4 ib sz : bt r/m32 imm8
0F BA /5 ib sz : bts r/m32 imm8
0F BA /6 ib sz : btr r/m32 imm8
0F BA /7 ib sz : btc r/m32 imm8
0F BB sz : btc r/m32 r32
0F BC /r sz : bsf r32 r/m32
0F BD /r sz : bsr r32 r/m32
0F BE /r sz : movsx r32 r/m8
0F BF /r : movsx r32 r/m16
0F Cx
pinsrw/pextrwはMMX命令だが、66をつけるとXMM命令になる。
0F C0 /r : xadd r/m8 r8
0F C1 /r sz : xadd r/m32 r32
0F C2 /r ib : cmpps xmm xmm/m128 imm8
0F C3 /r : movnti m32 r32
0F C4 /r ib : pinsrw mm r32/m16 imm8
0F C5 /r ib : pextrw r32 mm imm8
0F C6 /r ib : shufps xmm xmm/m128 imm8
0F C7
0F C7 /1 : cmpxchg8b m64,CX
0F C7 /6 sz : rdrand r32
0F C7 /7 sz : rdseed r32
0F C8 : bswap eax
0F C9 : bswap ecx
0F CA : bswap edx
0F CB : bswap ebx
0F CC : bswap esp
0F CD : bswap ebp
0F CE : bswap esi
0F CF : bswap edi
0F C8〜CFは、
REXプリフィックス
によって対象レジスターを64ビットやR8〜R15に変更できる。
0F Dx
0F D0
0F D1 /r : psrlw mm mm/m64
0F D2 /r : psrld mm mm/m64
0F D3 /r : psrlq mm mm/m64
0F D4 /r : paddq mm mm/m64
0F D5 /r : pmullw mm mm/m64
0F D6
0F D7 /r : pmovmskb r32 mm
0F D8 /r : psubusb mm mm/m64
0F D9 /r : psubusw mm mm/m64
0F DA /r : pminub mm mm/m64
0F DB /r : pand mm mm/m64
0F DC /r : paddusb mm mm/m64
0F DD /r : paddusw mm mm/m64
0F DE /r : pmaxub mm mm/m64
0F DF /r : pandn mm mm/m64
0F Ex
0F E0 /r : pavgb mm mm/m64
0F E1 /r : psraw mm mm/m64
0F E2 /r : psrad mm mm/m64
0F E3 /r : pavgw mm mm/m64
0F E4 /r : pmulhuw mm mm/m64
0F E5 /r : pmulhw mm mm/m64
0F E6
0F E7 /r : movntq m64 mm
0F E8 /r : psubsb mm mm/m64
0F E9 /r : psubsw mm mm/m64
0F EA /r : pminsw mm mm/m64
0F EB /r : por mm mm/m64
0F EC /r : paddsb mm mm/m64
0F ED /r : paddsw mm mm/m64
0F EE /r : pmaxsw mm mm/m64
0F EF /r : pxor mm mm/m64
mm mm/m64の命令に66をつけると、xmm xmm/m128の命令になる。
0F Fx
0F F0
0F F1 /r : psllw mm mm/m64
0F F2 /r : pslld mm mm/m64
0F F3 /r : psllq mm mm/m64
0F F4 /r : pmuludq mm mm/m64
0F F5 /r : pmaddwd mm mm/m64
0F F6 /r : psadbw mm mm/m64
0F F7 /r : maskmovq mm mm
0F F8 /r : psubb mm mm/m64
0F F9 /r : psubw mm mm/m64
0F FA /r : psubd mm mm/m64
0F FB /r : psubq mm mm/m64
0F FC /r : paddb mm mm/m64
0F FD /r : paddw mm mm/m64
0F FE /r : paddd mm mm/m64
0F FF : ud0
66拡張
66hを付けることで動作が変化する命令。特に顕著な変化がないものは、有効なオペコードであっても省略する。
66 0F : 拡張 (66 + 0F拡張) (※後述)
66 9C : pushfd
66 9D : popfd
66 CF : iretd
pushfd/popfdは、32ビットでは9C/9Dだが、64ビットでは66のプリフィクスが必要である。
0Fから始まるMMX命令に66を冠するとXMM命令になるものもある。
また、r32やm32の命令に66を冠すると概ねr16やm16命令になる。
66 0F拡張
66 0F 1x
66 0F 10 /r : movupd xmm xmm/m128
66 0F 11 /r : movupd xmm/m128 xmm
66 0F 12 /r : movlpd xmm m64
66 0F 13 /r : movlpd m64 xmm
66 0F 14 /r : unpcklpd xmm xmm/m128
66 0F 15 /r : unpckhpd xmm xmm/m128
66 0F 16 /r : movhpd xmm m64
66 0F 17 /r : movhpd m64 xmm
66 0F 2x
66 0F 28 /r : movapd xmm xmm/m128
66 0F 29 /r : movapd xmm/m128 xmm
66 0F 2A /r : cvtpi2pd xmm mm/m64
66 0F 2B /r : movntpd m128 xmm
66 0F 2C /r : cvttpd2pi mm xmm/m128
66 0F 2D /r : cvtpd2pi mm xmm/m128
66 0F 2E /r : ucomusd xmm xmm/m64
66 0F 2F /r : comisd xmm xmm/m64
66 0F 38
66 0F 38は、イミディエイト付きのSSE命令拡張。
66 0F 38 0x
66 0F 38 00 /r : pshufb xmm xmm/m128
66 0F 38 01 /r : phaddw xmm xmm/m128
66 0F 38 02 /r : phaddd xmm xmm/m128
66 0F 38 03 /r : phaddsw xmm xmm/m128
66 0F 38 04 /r : pmaddubsw xmm xmm/m128
66 0F 38 05 /r : phsubw xmm xmm/m128
66 0F 38 06 /r : phsubd xmm xmm/m128
66 0F 38 07 /r : phsubsw xmm xmm/m128
66 0F 38 08 /r : psignb xmm xmm/m128
66 0F 38 09 /r : psignw xmm xmm/m128
66 0F 38 0A /r : psignd xmm xmm/m128
66 0F 38 0B /r : pmulhrsw xmm xmm/m128
66 0F 38 0C /r : [※AVX] vpermilps xmm xmm xmm/m256
66 0F 38 0D /r : [※AVX] vpermilpd xmm xmm xmm/m256
66 0F 38 0E /r : [※AVX] vtestps xmm xmm/m256
66 0F 38 0F /r : [※AVX] vtestpd xmm xmm/m256
66 0F 38 1x
xmm m32の命令は、
VEX.L
=1にすることでymm m32命令に切り替わる。両者でニーモニックに差はない。
xmm m64の命令は、VEX.L=1にすることでymm m128命令に切り替わる。両者でニーモニックに差はない。
66 0F 38 10 /r : pblendvb xmm xmm/m128 xmm
66 0F 38 13 /r : [※AVX] vcvtph2ps xmm xmm/m64
66 0F 38 14 /r : blendvps xmm xmm/m128 xmm
66 0F 38 15 /r : blendvpd xmm xmm/m128 xmm
66 0F 38 16 /r : [※AVX] vpermps ymm ymm ymm/m256
66 0F 38 17 /r : ptest xmm xmm/m128
66 0F 38 18 /r : [※AVX] vbroadcastss xmm m32
66 0F 38 19 /r : [※AVX] vbroadcastsd ymm m64
66 0F 38 1A /r : [※AVX] vbroadcastf128 ymm m128
66 0F 38 1C /r : pabsb xmm xmm/m128
66 0F 38 1D /r : pabsw xmm xmm/m128
66 0F 38 1E /r : pabsd xmm xmm/m128
66 0F 38 2x
66 0F 38 20 /r : pmovsxbw xmm xmm/m64
66 0F 38 21 /r : pmovsxbd xmm xmm/m32
66 0F 38 22 /r : pmovsxbq xmm xmm/m16
66 0F 38 23 /r : pmovsxwd xmm xmm/m64
66 0F 38 24 /r : pmovsxwq xmm xmm/m32
66 0F 38 25 /r : pmovsxdq xmm xmm/m64
66 0F 38 28 /r : pmuldq xmm xmm/m128
66 0F 38 29 /r : pcmpeqq xmm xmm/m128
66 0F 38 2A /r : movntdqa xmm xmm/m128
66 0F 38 2B /r : packusdw xmm xmm/m128
次の命令は、VEX.L=1にすることでymmとm256命令に切り替わる。両者でニーモニックに差はない。
66 0F 38 2C /r : [※AVX] vmaskmovps xmm xmm xmm/m128
66 0F 38 2D /r : [※AVX] vmaskmovpd xmm xmm m128
66 0F 38 2E /r : [※AVX] vmaskmovps m128 xmm xmm
66 0F 38 2F /r : [※AVX] vmaskmovpd m128 xmm xmm
66 0F 38 3x
66 0F 38 30 /r : pmovzxbw xmm xmm/m64
66 0F 38 31 /r : pmovzxbd xmm xmm/m32
66 0F 38 32 /r : pmovzxbq xmm xmm/m16
66 0F 38 33 /r : pmovzxwd xmm xmm/m64
66 0F 38 34 /r : pmovzxwq xmm xmm/m32
66 0F 38 35 /r : pmovzxdq xmm xmm/m64
66 0F 38 36 /r : [※AVX] vpermd ymm ymm ymm/m256
66 0F 38 37 /r : pcmpgtq xmm xmm/m128
66 0F 38 38 /r : pminsb xmm xmm/m128
66 0F 38 39 /r : pminsd xmm xmm/m128
66 0F 38 3A /r : pminuw xmm xmm/m128
66 0F 38 3B /r : pminud xmm xmm/m128
66 0F 38 3C /r : pmaxsb xmm xmm/m128
66 0F 38 3D /r : pmaxsd xmm xmm/m128
66 0F 38 3E /r : pmaxuw xmm xmm/m128
66 0F 38 3F /r : pmaxud xmm xmm/m128
66 0F 38 4x
*vd命令はVEX.L=1にすることで*vq命令に切り替わる。
66 0F 38 40 /r : pmulld xmm xmm/m128
66 0F 38 41 /r : phminposuw xmm xmm/m128
66 0F 38 45 /r : [※AVX] vpsrlvd xmm xmm xmm/m128
66 0F 38 46 /r : [※AVX] vpsravd xmm xmm xmm/m128
66 0F 38 47 /r : [※AVX] vpsllvd xmm xmm xmm/m128
66 0F 38 5x
66 0F 38 58 /r : [※AVX] vpbroadcastd xmm xmm/m32
66 0F 38 59 /r : [※AVX] vpbroadcastq xmm xmm/m32
66 0F 38 5A /r : [※AVX] vbroadcasti128 ymm m128
66 0F 38 7x
66 0F 38 78 /r : [※AVX] vpbroadcastb xmm xmm/m8
66 0F 38 79 /r : [※AVX] vpbroadcastw xmm xmm/m16
66 0F 38 8x
vpmaskmovd命令は、
VEX.W
=1でvpmaskmovq命令に変更可能。
66 0F 38 80 /r : invept r32 m128
66 0F 38 81 /r : invvpid r32 m128
66 0F 38 82 /r : invvpcd r32 m128
66 0F 38 8C /r : [※AVX] vpmaskmovd xmm xmm m128
66 0F 38 8E /r : [※AVX] vpmaskmovd m128 xmm xmm
66 0F 38 9x
AVXのxmm xmm xmm/m128の命令は、VEX.L=1にすることでymm ymm ymm/m256命令に切り替わる。VEX.L=0/1で、それぞれps/pdになる。
AVXのxmm xmm xmm/m32の命令は、VEX.W=1にすることでxmm xmm xmm/m64命令に切り替わる。VEX.W=0/1で、それぞれss/sdになる。
66 0F 38 90 /r [W=0] : [※AVX] vpgatherdd xmm vm32x xmm
66 0F 38 90 /r [W=1] : [※AVX] vpgatherdq xmm vm32x xmm
66 0F 38 91 /r [W=0] : [※AVX] vpgatherqd xmm vm64x xmm
66 0F 38 91 /r [W=1] : [※AVX] vpgatherqq xmm vm64x xmm
66 0F 38 92 /r [W=0] : [※AVX] vgatherdps xmm vm32x xmm
66 0F 38 92 /r [W=1] : [※AVX] vgatherdpd xmm vm32x xmm
66 0F 38 93 /r [W=0] : [※AVX] vgatherqps xmm vm64x xmm
66 0F 38 93 /r [W=1] : [※AVX] vgatherqpd xmm vm64x xmm
66 0F 38 96 /r : [※AVX] vfmaddsub132pd/ps xmm xmm xmm/m128
66 0F 38 97 /r : [※AVX] vfmsubadd132pd/ps xmm xmm xmm/m128
66 0F 38 98 /r : [※AVX] vfmadd132pd/ps xmm xmm xmm/m128
66 0F 38 99 /r : [※AVX] vfmadd132sd/ss xmm xmm xmm/m32
66 0F 38 9A /r : [※AVX] vfmsub132pd/ps xmm xmm xmm/m128
66 0F 38 9B /r : [※AVX] vfmsub132sd/ss xmm xmm xmm/m32
66 0F 38 9C /r : [※AVX] vfnmadd132pd/ps xmm xmm xmm/m128
66 0F 38 9D /r : [※AVX] vfnmadd132sd/ss xmm xmm xmm/m32
66 0F 38 9E /r : [※AVX] vfnmsub132pd/ps xmm xmm xmm/m128
66 0F 38 9F /r : [※AVX] vfnmsub132sd/ss xmm xmm xmm/m32
66 0F 38 Ax
66 0F 38 A6 /r : [※AVX] vfmaddsub213pd/ps xmm xmm xmm/m128
66 0F 38 A7 /r : [※AVX] vfmsubadd213pd/ps xmm xmm xmm/m128
66 0F 38 A8 /r : [※AVX] vfmadd213pd/ps xmm xmm xmm/m128
66 0F 38 A9 /r : [※AVX] vfmadd213sd/ss xmm xmm xmm/m32
66 0F 38 AA /r : [※AVX] vfmsub213pd/ps xmm xmm xmm/m128
66 0F 38 AB /r : [※AVX] vfmsub213sd/ss xmm xmm xmm/m32
66 0F 38 AC /r : [※AVX] vfnmadd213pd/ps xmm xmm xmm/m128
66 0F 38 AD /r : [※AVX] vfnmadd213sd/ss xmm xmm xmm/m32
66 0F 38 AE /r : [※AVX] vfnmsub213pd/ps xmm xmm xmm/m128
66 0F 38 AF /r : [※AVX] vfnmsub213sd/ss xmm xmm xmm/m32
66 0F 38 Bx
66 0F 38 B6 /r : [※AVX] vfmaddsub231pd/ps xmm xmm xmm/m128
66 0F 38 B7 /r : [※AVX] vfmsubadd231pd/ps xmm xmm xmm/m128
66 0F 38 B8 /r : [※AVX] vfmadd231pd/ps xmm xmm xmm/m128
66 0F 38 B9 /r : [※AVX] vfmadd231sd/ss xmm xmm xmm/m32
66 0F 38 BA /r : [※AVX] vfmsub231pd/ps xmm xmm xmm/m128
66 0F 38 BB /r : [※AVX] vfmsub231sd/ss xmm xmm xmm/m32
66 0F 38 BC /r : [※AVX] vfnmadd231pd/ps xmm xmm xmm/m128
66 0F 38 BD /r : [※AVX] vfnmadd231sd/ss xmm xmm xmm/m32
66 0F 38 BE /r : [※AVX] vfnmsub231pd/ps xmm xmm xmm/m128
66 0F 38 BF /r : [※AVX] vfnmsub231sd/ss xmm xmm xmm/m32
66 0F 38 Dx
66 0F 38 DB /r : aesimc xmm xmm/m128
66 0F 38 DC /r : aesenc xmm xmm/m128
66 0F 38 DD /r : aesenclast xmm xmm/m128
66 0F 38 DE /r : aesdec xmm xmm/m128
66 0F 38 DF /r : aesdeclast xmm xmm/m128
66 0F 38 Fx
66 0F 38 F0 /r : movbe r32 m32
66 0F 38 F1 /r : movbe m32 r32
66 0F 38 F6 /r : adcx r32 r/m32
66 0F 38 F7 /r : [※AVX] shlx r32 r/m32 r32
66 0F 3A
66 0F 3Aは、イミディエイト付きのSSE命令拡張。
66 0F 3A 0x
xmm/m64 xmmの命令は、VEX.L=1にすることでxmmm128 ymm命令に切り替わる。両者でニーモニックに差はない。
xmm xmm/m128の命令は、VEX.L=1にすることでymm ymm/m256命令に切り替わる。両者でニーモニックに差はない。
66 0F 3A 00 /r ib : [※AVX] vpermq ymm ymm/m256 imm8
66 0F 3A 01 /r ib : [※AVX] vpermpd ymm ymm/m256 imm8
66 0F 3A 02 /r ib : [※AVX] vpblendd xmm xmm xmm/m128 imm8
66 0F 3A 04 /r ib : [※AVX] vpermilps xmm xmm xmm/m128 imm8
66 0F 3A 05 /r ib : [※AVX] vpermilpd xmm xmm xmm/m128 imm8
66 0F 3A 06 /r ib : [※AVX] vperm2f128 ymm ymm ymm/m256 imm8
66 0F 3A 08 /r ib : roundps xmm xmm/m128 imm8
66 0F 3A 09 /r ib : roundpd xmm xmm/m128 imm8
66 0F 3A 0A /r ib : roundss xmm xmm/m128 imm8
66 0F 3A 0B /r ib : roundsd xmm xmm/m128 imm8
66 0F 3A 0C /r ib : blendps xmm xmm/m128 imm8
66 0F 3A 0D /r ib : blendpd xmm xmm/m128 imm8
66 0F 3A 0E /r ib : pblendw xmm xmm/m128 imm8
66 0F 3A 0F /r ib : palignr xmm xmm/m128 imm8
66 0F 3A 1x
vcvtps2phは、VEX.L=1でymm/m128 ymmに変更できる。
66 0F 3A 14 /r ib : pextrb r/m8 xmm imm8
66 0F 3A 15 /r ib : pextrw r/m16 xmm imm8
66 0F 3A 16 /r ib : pextrd r/m32 xmm imm8
66 0F 3A 17 /r ib : extractps r/m8 xmm imm8
66 0F 3A 18 /r ib : vinsertf128 ymm ymm ymm/m256 imm8
66 0F 3A 19 /r ib : vextractf128 ymm/m256 xmm imm8
66 0F 3A 1D /r ib : [※AVX] vcvtps2ph xmm/m64 xmm imm8
66 0F 3A 2x
66 0F 3A 20 /r ib : pinsrb xmm r/m8 imm8
66 0F 3A 21 /r ib : insertps xmm r/m8 imm8
66 0F 3A 22 /r ib : pinsrd xmm r/m8 imm8
66 0F 3A 3x
66 0F 3A 38 /r ib : [※AVX] vinserti128 ymm ymm xmm/m128 imm8
66 0F 3A 39 /r ib : [※AVX] vextracti128 xmm/m128 ymm imm8
66 0F 3A 4x
66 0F 3A 40 /r ib : dpps xmm xmm/m128 imm8
66 0F 3A 41 /r ib : dppd xmm xmm/m128 imm8
66 0F 3A 42 /r ib : mpsadbw xmm xmm/m128 imm8
66 0F 3A 44 /r ib : pclmulqdq xmm xmm/m128 imm8
66 0F 3A 46 /r ib : [※AVX] vperm2i128 ymm ymm ymm/m256 imm8
66 0F 3A 4A /r /is4 : [※AVX] vblendvps xmm xmm xmm/m128 xmm
66 0F 3A 4B /r /is4 : [※AVX] vblendvpd xmm xmm xmm/m128 xmm
66 0F 3A 4C /r /is4 : [※AVX] vpblendvb xmm xmm xmm/m128 xmm
AVX命令のうちvpblendvb以外は、VMM.L=1にすることでymmとm256に切り替わる。
66 0F 3A 5x
Intel AVX
ではキャンセルされ、AMDが搭載することになった
4オペランドFMA命令
。VEXで符号化しないと利用できない。
VEX.L
=1で、ymmおよびm256命令になる。
/is4の上位4ビットでソースレジスターを指定。下位4ビットは予約で、常に0とする。
66 0F 3A 5C /r /is4 [W=0] : [※FMA4] vfmaddsubps xmm xmm xmm/m128 xmm
66 0F 3A 5C /r /is4 [W=1] : [※FMA4] vfmaddsubps xmm xmm xmm xmm/m128
66 0F 3A 5D /r /is4 [W=0] : [※FMA4] vfmaddsubpd xmm xmm xmm/m128 xmm
66 0F 3A 5D /r /is4 [W=1] : [※FMA4] vfmaddsubpd xmm xmm xmm xmm/m128
66 0F 3A 5E /r /is4 [W=0] : [※FMA4] vfmsubaddps xmm xmm xmm/m128 xmm
66 0F 3A 5E /r /is4 [W=1] : [※FMA4] vfmsubaddps xmm xmm xmm xmm/m128
66 0F 3A 5F /r /is4 [W=0] : [※FMA4] vfmsubaddpd xmm xmm xmm/m128 xmm
66 0F 3A 5F /r /is4 [W=1] : [※FMA4] vfmsubaddpd xmm xmm xmm xmm/m128
66 0F 3A 6x
66 0F 3A 60 /r ib : pcmpestrm xmm xmm/m128 imm8
66 0F 3A 61 /r ib : pcmpestri xmm xmm/m128 imm8
66 0F 3A 62 /r ib : pcmpistrm xmm xmm/m128 imm8
66 0F 3A 63 /r ib : pcmpistri xmm xmm/m128 imm8
66 0F 3A 68 /r /is4 [W=0] : [※FMA4] vfmaddps xmm xmm xmm/m128 xmm
66 0F 3A 68 /r /is4 [W=1] : [※FMA4] vfmaddps xmm xmm xmm xmm/m128
66 0F 3A 69 /r /is4 [W=0] : [※FMA4] vfmaddpd xmm xmm xmm/m128 xmm
66 0F 3A 69 /r /is4 [W=1] : [※FMA4] vfmaddpd xmm xmm xmm xmm/m128
66 0F 3A 6A /r /is4 [W=0] : [※FMA4] vfmaddss xmm xmm xmm/m32 xmm
66 0F 3A 6A /r /is4 [W=1] : [※FMA4] vfmaddss xmm xmm xmm xmm/m32
66 0F 3A 6B /r /is4 [W=0] : [※FMA4] vfmaddsd xmm xmm xmm/m64 xmm
66 0F 3A 6B /r /is4 [W=1] : [※FMA4] vfmaddsd xmm xmm xmm xmm/m64
66 0F 3A 6C /r /is4 [W=0] : [※FMA4] vfmsubps xmm xmm xmm/m128 xmm
66 0F 3A 6C /r /is4 [W=1] : [※FMA4] vfmsubps xmm xmm xmm xmm/m128
66 0F 3A 6D /r /is4 [W=0] : [※FMA4] vfmsubpd xmm xmm xmm/m128 xmm
66 0F 3A 6D /r /is4 [W=1] : [※FMA4] vfmsubpd xmm xmm xmm xmm/m128
66 0F 3A 6E /r /is4 [W=0] : [※FMA4] vfmsubss xmm xmm xmm/m32 xmm
66 0F 3A 6E /r /is4 [W=1] : [※FMA4] vfmsubss xmm xmm xmm xmm/m32
66 0F 3A 6F /r /is4 [W=0] : [※FMA4] vfmsubsd xmm xmm xmm/m64 xmm
66 0F 3A 6F /r /is4 [W=1] : [※FMA4] vfmsubsd xmm xmm xmm xmm/m64
66 0F 3A 7x
66 0F 3A 78 /r /is4 [W=0] : [※FMA4] vfnmaddps xmm xmm xmm/m128 xmm
66 0F 3A 78 /r /is4 [W=1] : [※FMA4] vfnmaddps xmm xmm xmm xmm/m128
66 0F 3A 79 /r /is4 [W=0] : [※FMA4] vfnmaddpd xmm xmm xmm/m128 xmm
66 0F 3A 79 /r /is4 [W=1] : [※FMA4] vfnmaddpd xmm xmm xmm xmm/m128
66 0F 3A 7A /r /is4 [W=0] : [※FMA4] vfnmaddss xmm xmm xmm/m32 xmm
66 0F 3A 7A /r /is4 [W=1] : [※FMA4] vfnmaddss xmm xmm xmm xmm/m32
66 0F 3A 7B /r /is4 [W=0] : [※FMA4] vfnmaddsd xmm xmm xmm/m64 xmm
66 0F 3A 7B /r /is4 [W=1] : [※FMA4] vfnmaddsd xmm xmm xmm xmm/m64
66 0F 3A 7C /r /is4 [W=0] : [※FMA4] vfnmsubps xmm xmm xmm/m128 xmm
66 0F 3A 7C /r /is4 [W=1] : [※FMA4] vfnmsubps xmm xmm xmm xmm/m128
66 0F 3A 7D /r /is4 [W=0] : [※FMA4] vfnmsubpd xmm xmm xmm/m128 xmm
66 0F 3A 7D /r /is4 [W=1] : [※FMA4] vfnmsubpd xmm xmm xmm xmm/m128
66 0F 3A 7E /r /is4 [W=0] : [※FMA4] vfnmsubss xmm xmm xmm/m32 xmm
66 0F 3A 7E /r /is4 [W=1] : [※FMA4] vfnmsubss xmm xmm xmm xmm/m32
66 0F 3A 7F /r /is4 [W=0] : [※FMA4] vfnmsubsd xmm xmm xmm/m64 xmm
66 0F 3A 7F /r /is4 [W=1] : [※FMA4] vfnmsubsd xmm xmm xmm xmm/m64
66 0F 3A Dx
66 0F 3A DF /r ib : aeskeygenassist xmm xmm/m128 imm8
66 0F 5x
66 0F 50 /r : movmskpd r32 xmm
66 0F 51 /r : sqrtpd xmm xmm/m128
66 0F 54 /r : andpd xmm xmm/m128
66 0F 55 /r : andnpd xmm xmm/m128
66 0F 56 /r : orpd xmm xmm/m128
66 0F 57 /r : xorpd xmm xmm/m128
66 0F 58 /r : addpd xmm xmm/m128
66 0F 59 /r : mulpd xmm xmm/m128
66 0F 5A /r : cvtpd2ps xmm xmm/m128
66 0F 5B /r : cvtps2dq xmm xmm/m128
66 0F 5C /r : subpd xmm xmm/m128
66 0F 5D /r : minpd xmm xmm/m128
66 0F 5E /r : divpd xmm xmm/m128
66 0F 5F /r : maxpd xmm xmm/m128
66 0F 6x
66 0F 60 /r : punpcklbw xmm xmm/m128
66 0F 61 /r : punpcklwd xmm xmm/m128
66 0F 62 /r : punockldq xmm xmm/m128
66 0F 63 /r : packsswd xmm xmm/m128
66 0F 64 /r : pcmpgtb xmm xmm/m128
66 0F 65 /r : pcmpgtw xmm xmm/m128
66 0F 66 /r : pcmpgtd xmm xmm/m128
66 0F 67 /r : packuswb xmm xmm/m128
66 0F 68 /r : punpckhbw xmm xmm/m128
66 0F 69 /r : punpckhwd xmm xmm/m128
66 0F 6A /r : punpckhdq xmm xmm/m128
66 0F 6B /r : packssdw xmm xmm/m128
66 0F 6C /r : punpcklqdq xmm xmm/m128
66 0F 6D /r : punpckhqdq xmm xmm/m128
66 0F 6E /r : movd xmm r/m32
66 0F 6F /r : movdqa xmm xmm/m128
66 0F 7x
66 0F 70 /r ib : pshufd xmm xmm/m128 imm8
66 0F 71
66 0F 71 /2 ib : psrlw xmm imm8
66 0F 71 /4 ib : psraw xmm imm8
66 0F 71 /6 ib : psllw xmm imm8
66 0F 72
66 0F 72 /2 ib : psrld xmm imm8
66 0F 72 /4 ib : psrad xmm imm8
66 0F 72 /6 ib : pslld xmm imm8
66 0F 73
66 0F 73 /2 ib : psrlq xmm imm8
66 0F 73 /3 ib : psrldq xmm imm8
66 0F 73 /6 ib : psllq xmm imm8
66 0F 73 /7 ib : pslldq xmm imm8
66 0F 74 /r : pcmpeqb xmm xmm/m128
66 0F 75 /r : pcmpeqw xmm xmm/m128
66 0F 76 /r : pcmpeqd xmm xmm/m128
66 0F 7C /r : haddpd xmm xmm/m128
66 0F 7D /r : hsubpd xmm xmm/m128
66 0F 7E /r : movd/q r/m32 xmm
66 0F 7F /r : movdqa xmm/m128 xmm
66 0F Cx
66 0F C2 /r ib : cmppd mm xmm/m128,imm8
66 0F C4 /r ib : pinsrw xmm r32/m16 imm8
66 0F C5 /r ib : pextrw r32 xmm imm8
66 0F C6 /r ib : shufpd xmm xmm/m128 imm8
66 0F C7 /6 : [mod≠11] vmclear m64
66 0F C7 /7 : [mod≠11] vmptrst m64
66 0F Dx
66 0F D0 /r : addsubpd xmm xmm/m128
66 0F D1 /r : psrlw xmm xmm/m128
66 0F D2 /r : psrld xmm xmm/m128
66 0F D3 /r : psrlq xmm xmm/m128
66 0F D4 /r : paddq xmm xmm/m128
66 0F D5 /r : pmullw xmm xmm/m128
66 0F D6 /r : movq xmm/m64 xmm
66 0F D7 /r : pmovmskb r32 xmm
66 0F D8 /r : psubusb xmm xmm/m128
66 0F D9 /r : psubusw xmm xmm/m128
66 0F DA /r : pminub xmm xmm/m128
66 0F DB /r : pand xmm xmm/m128
66 0F DC /r : paddusb xmm xmm/m128
66 0F DD /r : paddusw xmm xmm/m128
66 0F DE /r : pmaxub xmm xmm/m128
66 0F DF /r : pandn xmm xmm/m128
66 0F Ex
66 0F E0 /r : pavgb xmm xmm/m128
66 0F E1 /r : psraw xmm xmm/m128
66 0F E2 /r : psrad xmm xmm/m128
66 0F E3 /r : pavgw xmm xmm/m128
66 0F E4 /r : pmulhuw xmm xmm/m128
66 0F E5 /r : pmulhw xmm xmm/m128
66 0F E6 /r : cvttpd2dq xmm xmm/m128
66 0F E7 /r : movntdq m128 xmm
66 0F E8 /r : psubsb xmm xmm/m128
66 0F E9 /r : psubsw xmm xmm/m128
66 0F EA /r : pminsw xmm xmm/m128
66 0F EB /r : por xmm xmm/m128
66 0F EC /r : paddsb xmm xmm/m128
66 0F ED /r : paddsw xmm xmm/m128
66 0F EE /r : pmaxsw xmm xmm/m128
66 0F EF /r : pxor xmm xmm/m128
66 0F Fx
66 0F F1 /r : psllw xmm xmm/m128
66 0F F2 /r : pslld xmm xmm/m128
66 0F F3 /r : psllq xmm xmm/m128
66 0F F4 /r : pmuludq xmm xmm/m128
66 0F F5 /r : pmaddwd xmm xmm/m128
66 0F F6 /r : psadbw xmm xmm/m128
66 0F F7 /r : maskmovdqu xmm xmm
66 0F F8 /r : psubb xmm xmm/m128
66 0F F9 /r : psubw xmm xmm/m128
66 0F FA /r : psubd xmm xmm/m128
66 0F FB /r : psubq xmm xmm/m128
66 0F FC /r : paddb xmm xmm/m128
66 0F FD /r : paddw xmm xmm/m128
66 0F FE /r : paddd xmm xmm/m128
F2 0F拡張
AVX命令は、
VEX.W
=1でr64 r/m64に切り替えられる。
F2 0F 10 /r : movsd xmm xmm/m64
F2 0F 11 /r : movsd xmm/m64 xmm
F2 0F 12 /r : movddup xmm xmm/m64
F2 0F 2A /r : cvtsi2sd xmm r/m32
F2 0F 2C /r : cvttsd2si r32 xmm/m64
F2 0F 2D /r : cvtsd2si r32 xmm/m64
F2 0F 38
F2 0F 38 F0 /r : CRC32 r32 r/m8
F2 0F 38 F1 /r : CRC32 r32 r/m16
F2 0F 38 F7 /r : [※AVX] shrx r32 r/m32 r32
F2 0F 3A
F2 0F 3A F0 /r ib : [※AVX] rorx r32 r/m32 imm8
F2 0F 3A F5 /r : [※AVX] pdep r32 r32 r/m32
F2 0F 3A F6 /r : [※AVX] mulx r32 r32 r/m32
F2 0F 51 /r : sqrtsd xmm xmm/m64
F2 0F 58 /r : addsd xmm xmm/m64
F2 0F 59 /r : mulsd xmm xmm/m64
F2 0F 5A /r : cvtsd2ss xmm xmm/m64
F2 0F 5C /r : subsd xmm xmm/m64
F2 0F 5D /r : minsd xmm xmm/m64
F2 0F 5E /r : divsd xmm xmm/m64
F2 0F 5F /r : maxsd xmm xmm/m64
F2 0F 70 /r ib : pshuflw xmm xmm/m128 imm8
F2 0F 7C /r : haddps xmm xmm/m128
F2 0F 7D /r : hsubps xmm xmm/m128
F2 0F C2 /r ib : cmpsd xmm imm8
F2 0F D0 /r : addsubps xmm xmm/m64
F2 0F D6 /r : movdq2q mm xmm
F2 0F E6 /r : cvtpd2dq xmm xmm/m128
F2 0F F0 /r : lddqu xmm m128
F3 0F拡張
F3 0F 1x
F3 0F 10 /r : movss xmm xmm/m32
F3 0F 11 /r : movss xmm/m32 xmm
F3 0F 12 /r : movsldup xmm xmm/m128
F3 0F 16 /r : movshdup xmm xmm/m128
F3 0F 2x
F3 0F 2A /r : cvtsi2ss xmm r/m32
F3 0F 2C /r : cvttss2si r32 xmm/m32
F3 0F 2D /r : cvtss2si r32 xmm/m32
F3 0F 38
F3 0F 38 F5 /r : [※AVX] pext r32 r32 r/m32
F3 0F 38 F6 /r : adox r32 r/m32
F3 0F 38 F7 /r : [※AVX] sarx r32 r/m32 r32
F3 0F 5x
F3 0F 51 /r : sqrtss xmm xmm/m32
F3 0F 52 /r : rsqrtss xmm xmm/m32
F3 0F 53 /r : rcpss xmm xmm/m32
F3 0F 58 /r : addsd xmm xmm/m64
F3 0F 59 /r : mulss xmm xmm/m32
F3 0F 5A /r : cvtss2sd xmm xmm/m32
F3 0F 5B /r : cvttps2dq xmm xmm/m128
F3 0F 5C /r : subss xmm xmm/m32
F3 0F 5D /r : minss xmm xmm/m32
F3 0F 5E /r : divss xmm xmm/m32
F3 0F 5F /r : maxss xmm xmm/m32
F3 0F 6x
F3 0F 6F /r : movdqu xmm xmm/m128
F3 0F 7x
F3 0F 70 /r ib : pshufhw xmm xmm/m128 imm8
F3 0F 7E /r : movq xmm xmm/m64
F3 0F 7F /r : movdqu xmm/m128 xmm
F3 0F Ax
F3 0F AE /0 : rdfsbase r32
F3 0F AE /1 : rdgsbase r32
F3 0F AE /2 : wrfsbase r32
F3 0F AE /3 : wrgsbase r32
F3 0F Bx
F3 0F B8 /r : popcnt r32 r/m32
F3 0F BC /r sz : tzcnt r32 r/m32
F3 0F BD /r sz : lzcnt r32 r/m32
F3 0F Cx
F3 0F C2 /r ib : cmpss xmm imm8
F3 0F C7 /6 : [mod≠11] vmxon m64
F3 0F C7 /7 : [mod≠11] vmptrst m64
F3 0F Dx
F3 0F D6 /r : movq2dq xmm mm
F3 0F Ex
F3 0F E6 /r : cvtdq2pd xmm xmm/m64
REX.W
REX.W
を付けることで動作が変化する命令。特に顕著な変化がないものは、有効なオペコードであっても省略する。
なお、REX以前の従来のプリフィックス(66H、67H、F2H、F3H)は、REX.Wより前に置く。
REX.W 0F XX
REX.W 0F 38 F0 /r : movbe r64 r/m64 (Atom)
REX.W 0F 38 F1 /r : movbe m64 r64 (Atom)
REX.W 0F B7 /r : movzx r64 r/m64
REX.W 0F C7 /1 : cmpxchg16b
REX.W 0F C7 /6 : rdrand r64
REX.W 0F C7 /7 : rdseed r64
REX.W 6x
REX.W 63 /r : movsxd r64 r/m64
REX.W 9x
REX.W 98 : cdqe
REX.W 99 : cqo
REX.W Ax
REX.W A5 : movsq
REX.W A7 : cmpsq
REX.W AB : stosq
REX.W AD : lodsq
REX.W AF : scasq
REX.W Cx
REX.W CF: iretq
REX.W F2 0F xx
REX.W F2 0F 2D /r : cvtsd2si r64 xmm/m64
66 REX.W 0F XX
66 REX.W 0F 3A 16 /r ib : pextrq r/m64 xmm imm8
66 REX.W 0F 38 F6 /r : adcx r64 r/m64
F3 REX.W 0F XX
F3 REX.W 0F 38 F6 /r : adox r64 r/m64
F3 REX.W 0F AE /0 : rdfsbase r64
F3 REX.W 0F AE /1 : rdgsbase r64
F3 REX.W 0F AE /2 : wrfsbase r64
F3 REX.W 0F AE /3 : wrgsbase r64
F3 REX.W 0F BC /r : tzcnt r64 r/m64
F3 REX.W 0F BD /r : lzcnt r64 r/m64
再検索