オペコード (IA-32)

読み:オペコード
外語:opcode 英語 , op. code 英語
品詞:名詞

IA-32プロセッサーに対する命令を表わす番号。

目次

元々は16ビットマイクロプロセッサーとして設計された8086で採用されたものが初出。

32ビット化されたことから若干の仕様変更が施されているが、基本的な設計方針は維持されている。

基本構成

IA-32オペコードの基本的な特徴は次の通りである。

  • 可変長
  • 命令を表わすオペコードに続き、必要に応じてオペランドを表わすModR/M、更に必要に応じてSIBバイト、変位、即値、が続く
  • 「オペランドを表わすバイト」は、ModR/M(Mode Register Memory)バイトと呼ばれ、独特の構造を取る
  • オペコードの前に命令プリフィックスを置き、命令を修飾したり、拡張したりする

ModR/M

ModR/M(Mode Register Memory)バイトは、二つのソースの種類を表わすために使われる。

片方はレジスターに固定、もう片方はレジスターまたはメモリーが選択可能で、またレジスターを使う場合はオフセットを追加することができる。

76543210
modregr/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」とされていた。

現在の製品では機能が融合されておりシームレスに扱えるようになっており、MMXSSEなどの拡張も行なわれた。結果、オペコードの表現で不足する分は通常の命令と同様の書式による拡張方法で表現するようになっている。

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
  • 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
用語の所属
オペコード
関連する用語
x86
REXプリフィックス
VEXプリフィックス

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club