- To understand Microarchitecture optimization when the document refer to instruction format.
- Using empty REX ( 0x40 ) for code alignment.
- To understand how instruction variable length work.
- How ton of instructions fit inside instruction encoding.
- To understand how to calculate instruction length.
- push ebx // 1 byte
- push r8 // 2 bytes
- To understand why some instructions form does not exist based on instruction encoding.
- add eax, DWORD PTR [rbp] // Does not exist
- add eax, DWORD PTR [rbp + 0x0] // Exist
- To understand which instructions are important and how it intend to be used;
- 1 byte instruction // important
- add // Important : use 4 1-byte opcode ( 00 - 05 )
- sldt r/m16 // Less important : use 2-byte opcode ( 0F 00 )
- shl eax, 1 // Special instruction ( D1 E0 )
- shl eax, 1 // Normal instruction ( C1 E0 01 ) // Not intend to be used
- shl eax, 2 // Normal instruction ( C1 E0 02 )
- shl eax, 3 // Normal instruction ( C1 E0 03 )
- test eax, eax // Shorter than : cmp eax, 0
[Prefix]* [REX] [Prefix-like] Opcode [ModR/M [SIB [DISP]]] [imm]*
[Prefix]* [VEX] [Prefix-like] Opcode [ModR/M [SIB [DISP]]] [imm]*
[Prefix]* [EVEX] [Prefix-like] Opcode [ModR/M [SIB [DISP]]] [imm]*
ib : imm8
iw : imm16
id : imm32
iq : imm64
/0 : 00 - 07
/1 : 08 - 0F
/2 : 10 - 17
/3 : 18 - 1F
/4 : 20 - 27
/5 : 28 - 2F
/6 : 30 - 37
/7 : 28 - 3F
| Register | r/m8 | r/m16 | r/m32 | r/m64 | mm/m? | xmm/m? | ymm/m? | zmm/m? |
|---|---|---|---|---|---|---|---|---|
reg0 |
al | ax | eax | rax | mm0 | xmm0 | ymm0 | zmm0 |
reg1 |
cl | cx | ecx | rcx | mm1 | xmm1 | ymm1 | zmm1 |
reg2 |
dl | dx | edx | rdx | mm2 | xmm2 | ymm2 | zmm2 |
reg3 |
bl | bx | ebx | rbx | mm3 | xmm3 | ymm3 | zmm3 |
reg4 |
ah | sp | esp | rsp | mm4 | xmm4 | ymm4 | zmm4 |
reg5 |
bh | bp | ebp | rbp | mm5 | xmm5 | ymm5 | zmm5 |
reg6 |
ch | si | esi | rsi | mm6 | xmm6 | ymm6 | zmm6 |
reg7 |
dh | di | edi | rdi | mm7 | xmm7 | ymm7 | zmm7 |
| Memory \ Register | reg0 |
reg1 |
reg2 |
reg3 |
reg4 |
reg5 |
reg6 |
reg7 |
|---|---|---|---|---|---|---|---|---|
| [rax] | 00 | 08 | 10 | 18 | 20 | 28 | 30 | 38 |
| [rcx] | 01 | 09 | 11 | 19 | 21 | 29 | 31 | 39 |
| [rdx] | 02 | 0A | 12 | 1A | 22 | 2A | 32 | 3A |
| [rbx] | 03 | 0B | 13 | 1B | 23 | 2B | 33 | 3B |
| sib | 04 | 0C | 14 | 1C | 24 | 2C | 34 | 3C |
| rip + disp32 | 05 | 0D | 15 | 1D | 25 | 2D | 35 | 3D |
| [rsi] | 06 | 0E | 16 | 1E | 26 | 2E | 36 | 3E |
| [rdi] | 07 | 0F | 17 | 1F | 27 | 2F | 37 | 3F |
| Memory \ Register | reg0 |
reg1 |
reg2 |
reg3 |
reg4 |
reg5 |
reg6 |
reg7 |
|---|---|---|---|---|---|---|---|---|
| [rax] + disp8 | 40 | 48 | 50 | 58 | 60 | 68 | 70 | 78 |
| [rcx] + disp8 | 41 | 49 | 51 | 59 | 61 | 69 | 71 | 79 |
| [rdx] + disp8 | 42 | 4A | 52 | 5A | 62 | 6A | 72 | 7A |
| [rbx] + disp8 | 43 | 4B | 53 | 5B | 63 | 6B | 73 | 7B |
| sib + disp8 | 44 | 4C | 54 | 5C | 64 | 6C | 74 | 7C |
| [rbp] + disp8 | 45 | 4D | 55 | 5D | 65 | 6D | 75 | 7D |
| [rsi] + disp8 | 46 | 4E | 56 | 5E | 66 | 6E | 76 | 7E |
| [rdi] + disp8 | 47 | 4F | 57 | 5F | 67 | 6F | 77 | 7F |
| Memory \ Register | reg0 |
reg1 |
reg2 |
reg3 |
reg4 |
reg5 |
reg6 |
reg7 |
|---|---|---|---|---|---|---|---|---|
| [rax] + disp32 | 80 | 88 | 90 | 98 | A0 | A8 | B0 | B8 |
| [rcx] + disp32 | 81 | 89 | 91 | 99 | A1 | A9 | B1 | B9 |
| [rdx] + disp32 | 82 | 8A | 92 | 9A | A2 | AA | B2 | BA |
| [rbx] + disp32 | 83 | 8B | 93 | 9B | A3 | AB | B3 | BB |
| sib + disp32 | 84 | 8C | 94 | 9C | A4 | AC | B4 | BC |
| [rbp] + disp32 | 85 | 8D | 95 | 9D | A5 | AD | B5 | BD |
| [rsi] + disp32 | 86 | 8E | 96 | 9E | A6 | AE | B6 | BE |
| [rdi] + disp32 | 87 | 8F | 97 | 9F | A7 | AF | B7 | BF |
| Register \ Register | reg0 |
reg1 |
reg2 |
reg3 |
reg4 |
reg5 |
reg6 |
reg7 |
|---|---|---|---|---|---|---|---|---|
reg0 |
C0 | C8 | D0 | D8 | E0 | E8 | F0 | F8 |
reg1 |
C1 | C9 | D1 | D9 | E1 | E9 | F1 | F9 |
reg2 |
C2 | CA | D2 | DA | E2 | EA | F2 | FA |
reg3 |
C3 | CB | D3 | DB | E3 | EB | F3 | FB |
reg4 |
C4 | CC | D4 | DC | E4 | EC | F4 | FC |
reg5 |
C5 | CD | D5 | DD | E5 | ED | F5 | FD |
reg6 |
C6 | CE | D6 | DE | E6 | EE | F6 | FE |
reg7 |
C7 | CF | D7 | DF | E7 | EF | F7 | FF |
| ModR/M | * |
|---|---|
| 00 - 3F | [scaled index] + disp32 |
| 40 - 7F | [scaled index] + disp8 + [ebp] |
| 80 - BF | [scaled index] + disp32 + [ebp] |
| Scaled Index \ Base | rax | rcx | rdx | rbx | rsp | * |
rsi | rdi |
|---|---|---|---|---|---|---|---|---|
| [rax * 1] | 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 |
| [rcx * 1] | 08 | 09 | 0A | 0B | 0C | 0D | 0E | 0F |
| [rdx * 1] | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| [rbx * 1] | 18 | 19 | 1A | 1B | 1C | 1D | 1E | 1F |
| none | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| [rbp * 1] | 28 | 29 | 2A | 2B | 2C | 2D | 2E | 2F |
| [rsi * 1] | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 |
| [rdi * 1] | 38 | 39 | 3A | 3B | 3C | 3D | 3E | 3F |
| Scaled Index \ Base | rax | rcx | rdx | rbx | rsp | * |
rsi | rdi |
|---|---|---|---|---|---|---|---|---|
| [rax * 2] | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 |
| [rcx * 2] | 48 | 49 | 4A | 4B | 4C | 4D | 4E | 4F |
| [rdx * 2] | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 |
| [rbx * 2] | 58 | 59 | 5A | 5B | 5C | 5D | 5E | 5F |
| none | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 |
| [rbp * 2] | 68 | 69 | 6A | 6B | 6C | 6D | 6E | 6F |
| [rsi * 2] | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 |
| [rdi * 2] | 78 | 79 | 7A | 7B | 7C | 7D | 7E | 7F |
| Scaled Index \ Base | rax | rcx | rdx | rbx | rsp | * |
rsi | rdi |
|---|---|---|---|---|---|---|---|---|
| [rax * 4] | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 |
| [rcx * 4] | 88 | 89 | 8A | 8B | 8C | 8D | 8E | 8F |
| [rdx * 4] | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 |
| [rbx * 4] | 98 | 99 | 9A | 9B | 9C | 9D | 9E | 9F |
| none | A0 | A1 | A2 | A3 | A4 | A5 | A6 | A7 |
| [rbp * 4] | A8 | A9 | AA | AB | AC | AD | AE | AF |
| [rsi * 4] | B0 | B1 | B2 | B3 | B4 | B5 | B6 | B7 |
| [rdi * 4] | B8 | B9 | BA | BB | BC | BD | BE | BF |
| Scaled Index \ Base | rax | rcx | rdx | rbx | rsp | * |
rsi | rdi |
|---|---|---|---|---|---|---|---|---|
| [rax * 8] | C0 | C1 | C2 | C3 | C4 | C5 | C6 | C7 |
| [rcx * 8] | C8 | C9 | CA | CB | CC | CD | CE | CF |
| [rdx * 8] | D0 | D1 | D2 | D3 | D4 | D5 | D6 | D7 |
| [rbx * 8] | D8 | D9 | DA | DB | DC | DD | DE | DF |
| none | E0 | E1 | E2 | E3 | E4 | E5 | E6 | E7 |
| [rbp * 8] | E8 | E9 | EA | EB | EC | ED | EE | EF |
| [rsi * 8] | F0 | F1 | F2 | F3 | F4 | F5 | F6 | F7 |
| [rdi * 8] | F8 | F9 | FA | FB | FC | FD | FE | FF |
0xC4 0bRXBm-mmmm 0bWvvv-vLpp
0xC5 0bRvvv-vLpp
| Prefix-like \ Example | 2-byte VEX | 3-byte VEX |
|---|---|---|
| 0F | C5 F8 | C4 E1 78 |
| 66 0F | C5 F9 | C4 E1 79 |
| 66 0F 38 | C4 E2 79 | |
| 66 0F 3A | C4 E3 79 | |
| F2 0F | C5 FA | C4 E1 7A |
| F2 0F 38 | C4 E2 7A | |
| F2 0F 3A | C4 E3 7A | |
| F3 0F | C5 FB | C4 E1 7B |
| F3 0F 38 | C4 E2 7B | |
| F3 0F 3A | C4 E3 7B |
R : REX.R in 1’s complement
- 0b
0: REX.R = 1 - 0b
1: REX.R = 0
X : REX.X in 1’s complement
- 0b
0: REX.X = 1 - 0b
1: REX.X = 0
B : REX.B in 1’s complement
- 0b
0: REX.B = 1 - 0b
1: REX.B = 0
W : REX.W
m-mmmm
- 0b
0-0000: Reserved for future use - 0b
0-0001: implied0Fleading opcode byte - 0b
0-0010: implied0F 38leading opcode byte - 0b
0-0011: implied0F 3Aleading opcode byte - 0b
0-0100- 0b11111: Reserved for future use
2-byte VEX ( 0xC5 ) : implied
0Fleading opcode byte
| vvv-v | Dest Register | General-Purpose Register |
|---|---|---|
| 0b111-1 | xmm0 / ymm0 | rax / eax |
| 0b111-0 | xmm1 / ymm1 | rcx / ecx |
| 0b110-1 | xmm2 / ymm2 | rdx / edx |
| 0b110-0 | xmm3 / ymm3 | rbx / ebx |
| 0b101-1 | xmm4 / ymm4 | rsp / esp |
| 0b101-0 | xmm5 / ymm5 | rbp / ebp |
| 0b100-1 | xmm6 / ymm6 | rsi / esi |
| 0b100-0 | xmm7 / ymm7 | rdi / edi |
| 0b011-1 | xmm8 / ymm8 | r8 / r8d |
| 0b011-0 | xmm9 / ymm9 | r9 / r9d |
| 0b010-1 | xmm10 / ymm10 | r10 / r10d |
| 0b010-0 | xmm11 / ymm11 | r11 / r11d |
| 0b001-1 | xmm12 / ymm12 | r12 / r12d |
| 0b001-0 | xmm13 / ymm13 | r13 / r13d |
| 0b000-0 | xmm14 / ymm14 | r14 / r14d |
| 0b000-0 | xmm15 / ymm15 | r15 / r15d |
L : Vector Length
- 0b
0: 128-bit vector | scalar - 0b
1: 256-bit vector
pp : Prefix
- 0b
00: None - 0b
01: 0x66 - 0b
10: 0xF3 - 0b
11: 0xF2
26 : es:[addr] // use with any branch instruction is reserved
2E : cs:[addr] // use with any branch instruction is reserved
36 : ss:[addr] // use with any branch instruction is reserved
3E : ds:[addr] // use with any branch instruction is reserved
64 : fs:[addr] // use with any branch instruction is reserved
65 : gs:[addr] // use with any branch instruction is reserved
66 : data16 // mandatory prefix
67 : addr32
F0 : lock
F2 : repnz // mandatory prefix
F3 : repz // mandatory prefix
41 : rex.b // ModR/M r/m | SIB base | Opcode reg
42 : rex.x // SIB index
44 : rex.r // ModR/M reg
48 : rex.w // 32bit ➡️ 64bit
| Flag | |||
|---|---|---|---|
| b & x & r | eax - edi | ➡️ | r8d - r15d |
| b & x & r | xmm0 - xmm7 | ➡️ | xmm8 - xmm15 |
| w | eax - edi | ➡️ | rax - rdi |
| w | r8d - r15d | ➡️ | r8 - r15 |
C4 ?? ?? : 3-byte prefix
C5 ?? : 2-byte prefix
62 ?? ?? ?? : 4-byte prefix
0F
0F 38
0F 3A
66 [VEX] 0F
66 [VEX] 0F 38
66 [VEX] 0F 3A
F2 [VEX] 0F
F2 [VEX] 0F 38
F2 [VEX] 0F 3A
F3 [VEX] 0F
F3 [VEX] 0F 38
F3 [VEX] 0F 3A
💚 00 /r : add r/m8, r8
💚 01 /r : add r/m32, r32
💚 02 /r : add r8, r/m8
💚 03 /r : add r32, r/m32
💚 04 ib : add al, imm8
💚 05 id : add eax, imm32
💀 06 : push es // Invalid
💀 07 : pop es // Invalid
💚 08 /r : or r/m8, r8
💚 09 /r : or r/m32, r32
💚 0A /r : or r8, r/m8
💚 0B /r : or r32, r/m32
💚 0C ib : or al, imm8
💚 0D id : or eax, imm32
💀 0E : push cs // Invalid
💙 10 /r : adc r/m8, r8
💙 11 /r : adc r/m32, r32
💙 12 /r : adc r8, r/m8
💙 13 /r : adc r32, r/m32
💙 14 ib : adc al, imm8
💙 15 id : adc eax, imm32
💀 16 : push ss // Invalid
💀 17 : pop ss // Invalid
💙 18 /r : sbb r/m8, r8
💙 19 /r : sbb r/m32, r32
💙 1A /r : sbb r8, r/m8
💙 1B /r : sbb r32, r/m32
💙 1C ib : sbb al, imm8
💙 1D id : sbb eax, imm32
💀 1E : push ds // Invalid
💀 1F : pop ds // Invalid
💚 20 /r : and r/m8, r8
💚 21 /r : and r/m32, r32
💚 22 /r : and r8, r/m8
💚 23 /r : and r32, r/m32
💚 24 ib : and al, imm8
💚 25 id : and eax, imm32
💀 27 : daa // Invalid
💚 28 /r : sub r/m8, r8
💚 29 /r : sub r/m32, r32
💚 2A /r : sub r8, r/m8
💚 2B /r : sub r32, r/m32
💚 2C ib : sub al, imm8
💚 2D id : sub eax, imm32
💀 2F : das // Invalid
💚 30 /r : xor r/m8, r8
💚 31 /r : xor r/m32, r32
💚 32 /r : xor r8, r/m8
💚 33 /r : xor r32, r/m32
💚 34 ib : xor al, imm8
💚 35 id : xor eax, imm32
💀 37 : aaa // Invalid
💚 38 /r : cmp r/m8, r8
💚 39 /r : cmp r/m32, r32
💚 3A /r : cmp r8, r/m8
💚 3B /r : cmp r32, r/m32
💚 3C ib : cmp al, imm8
💚 3D id : cmp eax, imm32
💀 3F : aas // Invalid
💚 50 : push rax
💚 51 : push rcx
💚 52 : push rdx
💚 53 : push rbx
💚 54 : push rsp
💚 55 : push rbp
💚 56 : push rsi
💚 57 : push rdi
💚 58 : pop rax
💚 59 : pop rcx
💚 5A : pop rdx
💚 5B : pop rbx
💚 5C : pop rsp
💚 5D : pop rbp
💚 5E : pop rsi
💚 5F : pop rdi
💀 60 : push a // Invalid
💀 61 : pop a // Invalid
💚 63 /r : movsxd r32, r/m32
💔 68 : push imm32
😕 69 /r id : imul r32, r/m32, imm32
💔 6A : push imm8
😕 6B /r ib : imul r32, r/m32, imm8
💔 6C : insb
💔 6D : insd
💔 6E : outsb
💔 6F : outsd
💚 70 ib : jo rel8
💚 71 ib : jno rel8
💚 72 ib : jb rel8
💚 73 ib : jae rel8
💚 74 ib : je rel8
💚 75 ib : jne rel8
💚 76 ib : jbe rel8
💚 77 ib : ja rel8
💚 78 ib : js rel8
💚 79 ib : jns rel8
💚 7A ib : jp rel8
💚 7B ib : jnp rel8
💚 7C ib : jl rel8
💚 7D ib : jge rel8
💚 7E ib : jle rel8
💚 7F ib : jg rel8
💚 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 /0 id : add r/m32, imm32
💚 81 /1 id : or r/m32, imm32
💚 81 /2 id : adc r/m32, imm32
💚 81 /3 id : sbb r/m32, imm32
💚 81 /4 id : and r/m32, imm32
💚 81 /5 id : sub r/m32, imm32
💚 81 /6 id : xor r/m32, imm32
💚 81 /7 id : cmp r/m32, imm32
💭 82 : // Unknown
💚 83 /0 ib : add r/m32, imm8
💚 83 /1 ib : or r/m32, imm8
💚 83 /2 ib : adc r/m32, imm8
💚 83 /3 ib : sbb r/m32, imm8
💚 83 /4 ib : and r/m32, imm8
💚 83 /5 ib : sub r/m32, imm8
💚 83 /6 ib : xor r/m32, imm8
💚 83 /7 ib : cmp r/m32, imm8
😕 84 /r : test r/m8, r8
😕 85 /r : test r/m32, r32
😕 86 /r : xchg r8, r/m8
😕 87 /r : xchg r/m32, r32
😕 88 /r : mov r/m8, r8
😕 89 /r : mov r/m32, r32
😕 8A /r : mov r8, r/m8
😕 8B /r : mov r32, r/m32
😕 8C /r : mov r16/r32/m16, sreg
😕 8D /r : lea r32, m
😕 8E /r : mov sreg, r/m16
😕 8F /r : pop r/m64
💚 90 : xchg eax, eax // nop
😕 91 : xchg ecx, eax
😕 92 : xchg edx, eax
😕 93 : xchg ebx, eax
😕 94 : xchg esp, eax
😕 95 : xchg ebp, eax
😕 96 : xchg esi, eax
😕 97 : xchg edi, eax
😕 98 : cwde
😕 99 : cdq
💀 9A iw id : call ptr16:32 // Invalid
😕 9B : fwait
😕 9C : pushf
😕 9D : popf
😕 9E : sahf
😕 9F : lahf
😕 A0 iq : mov al, moffs8
😕 A1 iq : mov eax, moffs32
😕 A2 iq : mov moffs8, AL
😕 A3 iq : mov moffs32, eax
😕 A4 : movsb
😕 A5 : movsd
😕 A6 : cmpsb
😕 A7 : cmpsd
😕 A8 ib : test al, imm8
😕 A9 id : test eax, imm32
😕 AA : stosb
😕 AB : stosd
😕 AC : lodsb
😕 AD : lodsd
😕 AE : scasb
😕 AF : scasd
😕 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 : mov eax, imm32
😕 B9 id : mov ecx, imm32
😕 BA id : mov edx, imm32
😕 BB id : mov ebx, imm32
😕 BC id : mov esp, imm32
😕 BD id : mov ebp, imm32
😕 BE id : mov esi, imm32
😕 BF id : mov edi, imm32
😕 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 : shl r/m8, imm8
😕 C0 /4 ib : sal r/m8, imm8
😕 C0 /5 ib : shr r/m8, imm8
😕 C0 /7 ib : sar r/m8, imm8
😕 C1 /0 ib : rol r/m32, imm8
😕 C1 /1 ib : ror r/m32, imm8
😕 C1 /2 ib : rcl r/m32, imm8
😕 C1 /3 ib : rcr r/m32, imm8
😕 C1 /4 ib : shl r/m32, imm8
😕 C1 /4 ib : sal r/m32, imm8
😕 C1 /5 ib : shr r/m32, imm8
😕 C1 /7 ib : sar r/m32, imm8
😕 C2 iw : ret imm16
😕 C3 : ret
😕 C6 /0 ib : mov r/m8, imm8
😕 C7 /0 id : mov r/m32, imm32
😕 C8 iw ib : enter imm16, imm8
😕 C9 : leave
😕 CA iw : retf imm16
😕 CB : retf
😕 CC : int3
😕 CD id : int imm8
💀 CE : into // Invalid
😕 CF : iret
😕 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 : shl r/m8, 1
😕 D0 /4 : sal r/m8, 1
😕 D0 /5 : shr r/m8, 1
😕 D0 /7 : sar r/m8, 1
😕 D1 /0 : rol r/m16, 1
😕 D1 /1 : ror r/m16, 1
😕 D1 /2 : rcl r/m16, 1
😕 D1 /3 : rcr r/m16, 1
😕 D1 /4 : shl r/m16, 1
😕 D1 /4 : sal r/m16, 1
😕 D1 /5 : shr r/m16, 1
😕 D1 /7 : sar r/m16, 1
😕 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 : shl r/m8, cl
😕 D2 /4 : sal r/m8, cl
😕 D2 /5 : shr r/m8, cl
😕 D2 /7 : sar r/m8, cl
😕 D3 /0 : rol r/m16, cl
😕 D3 /1 : ror r/m16, cl
😕 D3 /2 : rcl r/m16, cl
😕 D3 /3 : rcr r/m16, cl
😕 D3 /4 : shl r/m16, cl
😕 D3 /4 : sal r/m16, cl
😕 D3 /5 : shr r/m16, cl
😕 D3 /7 : sar r/m16, cl
💀 D4 ib : aam imm8 // Invalid
💀 D5 ib : aad imm8 // Invalid
💭 D6 : // Unknown
😕 D7 : xlat
💔 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 : fadd st(0), st(0)
💔 D8 C1 : fadd st(0), st(1)
💔 D8 C2 : fadd st(0), st(2)
💔 D8 C3 : fadd st(0), st(3)
💔 D8 C4 : fadd st(0), st(4)
💔 D8 C5 : fadd st(0), st(5)
💔 D8 C6 : fadd st(0), st(6)
💔 D8 C7 : fadd st(0), st(7)
💔 D8 C8 : fmul st(0), st(0)
💔 D8 C9 : fmul st(0), st(1)
💔 D8 CA : fmul st(0), st(2)
💔 D8 CB : fmul st(0), st(3)
💔 D8 CC : fmul st(0), st(4)
💔 D8 CD : fmul st(0), st(5)
💔 D8 CE : fmul st(0), st(6)
💔 D8 CF : fmul st(0), st(7)
💔 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 E0 : fchs
💔 D9 E1 : fabs
💔 D9 F0 : f2xm1
💔 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
💔 DB /0 : fild m32int
💔 DB /1 : fisttp m32int
💔 DB /2 : fist m32int
💔 DB /3 : fistp m32int
💔 DB /5 : fld m80fp
💔 DB /7 : fltp m80fp
💔 DB E2 : fnclex
💔 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 : fdev m64fp
💔 DC /7 : fdivr m64fp
💔 DC C0 : fadd st(0), st(0)
💔 DC C1 : fadd st(1), st(0)
💔 DC C2 : fadd st(2), st(0)
💔 DC C3 : fadd st(3), st(0)
💔 DC C4 : fadd st(4), st(0)
💔 DC C5 : fadd st(5), st(0)
💔 DC C6 : fadd st(6), st(0)
💔 DC C7 : fadd st(7), st(0)
💔 DC C8 : fmul st(0), st(0)
💔 DC C9 : fmul st(1), st(0)
💔 DC CA : fmul st(2), st(0)
💔 DC CB : fmul st(3), st(0)
💔 DC CC : fmul st(4), st(0)
💔 DC CD : fmul st(5), st(0)
💔 DC CE : fmul st(6), st(0)
💔 DC CF : fmul st(7), st(0)
💔 DD /0 : fld m64fp
💔 DD /1 : fisttp m64int
💔 DD /2 : fst m64fp
💔 DD /3 : fstp m64fp
💔 DD /4 : frstor m94/108byte
💔 DD /6 : fnsave m94/108byte
💔 DD /7 : fnstsw m2byte
💔 DE /0 : fiadd m16int
💔 DE /1 : fimul m16int
💔 DE /2 : ficom m16int
💔 DE /3 : ficomip m16int
💔 DE /4 : fisub m16int
💔 DE /5 : fisubr m16int
💔 DE /6 : fidiv m16int
💔 DE /7 : fidivr m16int
💔 DE C0 : faddp st(0), st(0)
💔 DE C1 : faddp st(1), st(0)
💔 DE C2 : faddp st(2), st(0)
💔 DE C3 : faddp st(3), st(0)
💔 DE C4 : faddp st(4), st(0)
💔 DE C5 : faddp st(5), st(0)
💔 DE C6 : faddp st(6), st(0)
💔 DE C7 : faddp st(7), st(0)
💔 DE C8 : fmulp st(0), st(0)
💔 DE C9 : fmulp st(1), st(0)
💔 DE CA : fmulp st(2), st(0)
💔 DE CB : fmulp st(3), st(0)
💔 DE CC : fmulp st(4), st(0)
💔 DE CD : fmulp st(5), st(0)
💔 DE CE : fmulp st(6), st(0)
💔 DE CF : fmulp st(7), st(0)
💔 DF /0 : fild m16int
💔 DF /1 : fisttp m16int
💔 DF /2 : fist m16int
💔 DF /3 : fistp m16int
💔 DF /4 : fbld m80bcd
💔 DF /5 : fild m64int
💔 DF /6 : fbstp m80bcd
💔 DF /7 : fistp m64int
😕 E0 ib : loopne rel8
😕 E1 ib : loope rel8
😕 E2 ib : loop rel8
😕 E3 ib : jrcxz rel8
💔 E4 ib : in al, imm8
💔 E5 ib : in eax, imm8
💔 E6 ib : out imm8, al
💔 E7 ib : out imm8, eax
😕 E8 id : call rel32
😕 E9 id : jmp rel32
😕 EA iw id : jmp ptr16:32
😕 EB iw : jmp rel16
💔 EC ib : in al, dx
💔 ED ib : in eax, dx
💔 EE : out dx, al
💔 EF : out dx, eax
😕 F1 : int1 // icebp
😕 F4 : hlt
😕 F5 : cmc
😕 F6 /0 ib : test r/m8, imm8
😕 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 /0 id : test r/m32, imm32
😕 F7 /2 : not r/m32
😕 F7 /3 : neg r/m32
😕 F7 /4 : mul r/m32
😕 F7 /5 : imul r/m32
😕 F7 /6 : div r/m32
😕 F7 /7 : idiv r/m32
😕 F8 : clc
😕 F9 : stc
FA : cli // Privilege
FB : sti // Privilege
😕 FC : cld
😕 FD : std
😕 FE /0 : dec r/m8
😕 FE /1 : inc r/m8
😕 FF /0 : dec r/m16
😕 FF /1 : inc r/m16
😕 FF /2 : call r/m64
😕 FF /3 : call m16:32
😕 FF /4 : jmp r/m64
😕 FF /5 : jmp m16:32
😕 FF /6 : push r/m64
😕 0F 00 /0 : sldt r/m16
😕 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 0B : ud2
💚 0F 01 F9 : rdtscp
😕 0F 06 : clts
😕 0F 18 /0 : prefetchnta m8
😕 0F 18 /1 : prefetch0 m8
😕 0F 18 /2 : prefetch1 m8
😕 0F 18 /3 : prefetch2 m8
😕 0F 1F /0 : nop
💚 0F 31 : rdtsc
💚 0F 40 : cmovo r32, r/m32
💚 0F 41 : cmovno r32, r/m32
💚 0F 42 : cmovb r32, r/m32
💚 0F 43 : cmovae r32, r/m32
💚 0F 44 : cmove r32, r/m32
💚 0F 45 : cmovne r32, r/m32
💚 0F 46 : cmovbe r32, r/m32
💚 0F 47 : cmova r32, r/m32
💚 0F 48 : cmovs r32, r/m32
💚 0F 49 : cmovns r32, r/m32
💚 0F 4A : cmovp r32, r/m32
💚 0F 4B : cmovnp r32, r/m32
💚 0F 4C : cmovl r32, r/m32
💚 0F 4D : cmovge r32, r/m32
💚 0F 4E : cmovle r32, r/m32
💚 0F 4F : cmovg r32, r/m32
😕 0F 05 : syscall
😕 0F 07 : sysret
💚 0F 80 ib : jo rel32
💚 0F 81 ib : jno rel32
💚 0F 82 ib : jb rel32
💚 0F 83 ib : jae rel32
💚 0F 84 ib : je rel32
💚 0F 85 ib : jne rel32
💚 0F 86 ib : jbe rel32
💚 0F 87 ib : ja rel32
💚 0F 88 ib : js rel32
💚 0F 89 ib : jns rel32
💚 0F 8A ib : jp rel32
💚 0F 8B ib : jnp rel32
💚 0F 8C ib : jl rel32
💚 0F 8D ib : jge rel32
💚 0F 8E ib : jle rel32
💚 0F 8F ib : jg rel32
💚 0F A2 : cpuid
😕 0F A3 : bt r/m32, r32
😕 0F AB : bts r/m32, r32
💚 0F AE /7 : clflush m8
😕 66 0F AE /7 : clflushopt m8
💚 0F AE E8 : lfence
💚 0F AE F0 : mfence
💚 0F AE F8 : sfence
😕 0F AF /r : imul r32, r/m32
💚 0F B0 /r : cmpxchg r/m8, r8
💚 0F B1 /r : cmpxchg r/m32, r32
😕 0F B3 /r : btr r/m32, r32
💚 0F B6 /r : movzx r32, r/m8
💚 0F B7 /r : movzx r32, r/m16
😕 0F B9 /r : ud1 r32, r/m32
😕 0F BA /4 ib : bt r/m32, imm8
😕 0F BA /5 ib : bts r/m32, imm8
😕 0F BA /6 ib : btr r/m32, imm8
😕 0F BA /7 ib : btc r/m32, imm8
😕 0F BB /r ib : btc r/m32, r32
😕 0F BC /r : bsf r32, r/m32
😕 0F BD /r : bsr r32, r/m32
💚 0F BE /r : movsx r32, r/m8
💚 0F BF /r : movsx r32, r/m16
😕 0F C7 /1 : cmpxchg8b m64
😕 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
😕 F2 0F 38 F0 /r : crc32 r32, r/m8
😕 F2 0F 38 F1 /r : crc32 r32, r/m16
😕 0F FF /r : ud0 r32, r/m32
😕 66 0F 3A 0C /r ib : blendps xmm, xmm/m128, imm8
😕 vex.128.66.0F.3A 0C /r ib : vblendps xmm, xmm, xmm/m128, imm8
😕 vex.256.66.0F.3A 0C /r ib : vblendps ymm, ymm, ymm/m256, imm8
😕 66 0F 3A 0D /r ib : blendpd xmm, xmm/m128, imm8
😕 vex.128.66.0F.3A 0D /r ib : vblendpd xmm, xmm, xmm/m128, imm8
😕 vex.256.66.0F.3A 0D /r ib : vblendpd ymm, ymm, ymm/m256, imm8
😕 66 0F 38 14 /r ib : blendvps xmm, xmm/m128, xmm0
😕 vex.128.66.0F.3A 4A /r ib : vblendvps xmm, xmm, xmm/m128, xmm
😕 vex.256.66.0F.3A 4A /r ib : vblendvps ymm, ymm, ymm/m256, ymm
😕 66 0F 38 15 /r ib : blendvpd xmm, xmm/m128, xmm0
😕 vex.128.66.0F.3A 4B /r ib : vblendvpd xmm, xmm, xmm/m128, xmm
😕 vex.256.66.0F.3A 4B /r ib : vblendvpd ymm, ymm, ymm/m256, ymm
😕 66 0F 3A 17 /r ib : extractps reg/m32, xmm, imm8
😕 vex.128.66.0F.3A 17 /r ib : vextractps reg/m32, xmm, imm8
😕 0F 2A /r : cvtpi2ps xmm, mm/m64
😕 66 0F 2A /r : cvtpi2pd xmm, mm/m64
😕 vex.128.66.0F 2A /r : vcvtpi2pd xmm, xmm/m128
😕 vex.256.66.0F 2A /r : vcvtpi2pd xmm, ymm/m256
😕 F2 0F 2A /r : cvtsi2sd xmm, r32/m32
😕 vex.F2.0F 2A /r : vcvtsi2sd xmm, xmm, r/m32
😕 F3 0F 2A /r : cvtsi2ss xmm, r/m32
😕 vex.F3.0F 2A /r : vcvtsi2ss xmm, xmm, r/m32
😕 0F 2C /r : cvttps2pi mm, xmm/m64
😕 66 0F 2C /r : cvttpd2pi mm, xmm/m128
😕 F2 0F 2C /r : cvttsd2si r32, xmm/m64
😕 vex.F2.0F 2C /r : vcvttsd2si r32, xmm/m64
😕 F3 0F 2C /r : cvttss2si r32, xmm/m32
😕 vex.F3.0F 2C /r : vcvttss2si r32, xmm/m32
😕 0F 2D /r : cvtps2pi mm, xmm/m64
😕 66 0F 2D /r : cvtpd2pi mm, xmm/m128
😕 F2 0F 2D /r : cvtsd2si r32, xmm/m64
😕 vex.F2.0F 2D /r : vcvtsd2si r32, xmm/m64
😕 F3 0F 2D /r : cvtss2si r32, xmm/m32
😕 vex.F3.0F 2D /r : vcvtss2si r32, xmm/m32
😕 0F 2F /r : comiss xmm, xmm/m64
😕 vex.0F 2F /r : vcomiss xmm, xmm/m64
😕 66 0F 2F /r : comisd xmm, xmm/m64
😕 vex.66.0F 2F /r : vcomisd xmm, xmm/m64
😕 66 0F 3A 40 /r ib : dpps xmm, xmm/m128, imm8
😕 vex.128.66.0F.3A 40 /r ib : vblendps vdpps xmm, xmm, xmm/m128, imm8
😕 vex.256.66.0F.3A 40 /r ib : vblendps vdpps ymm, ymm, ymm/m256, imm8
😕 66 0F 3A 41 /r ib : dppd xmm, xmm/m128, imm8
😕 vex.128.66.0F.3A 41 /r ib : vdppd xmm, xmm, xmm/m128, imm8
😕 0F 54 /r : andps xmm, xmm/m128
😕 vex.128.0F 54 /r : vandps xmm, xmm, xmm/m128
😕 vex.256.0F 54 /r : vandps ymm, ymm, ymm/m256
😕 66 0F 54 /r : andpd xmm, xmm/m128
😕 vex.128.66.0F 54 /r : vandpd xmm, xmm, xmm/m128
😕 vex.256.66.0F 54 /r : vandpd ymm, ymm, ymm/m256
😕 0F 55 /r : andnps xmm, xmm/m128
😕 vex.128.0F 55 /r : vandnps xmm, xmm, xmm/m128
😕 vex.256.0F 55 /r : vandnps ymm, ymm, ymm/m256
😕 66 0F 55 /r : andnpd xmm, xmm/m128
😕 vex.128.66.0F 55 /r : vandnpd xmm, xmm, xmm/m128
😕 vex.256.66.0F 55 /r : vandnpd ymm, ymm, ymm/m256
😕 0F 58 /r : addps xmm, xmm/m128
😕 vex.128.0F 58 /r : vaddps xmm, xmm, xmm/m128
😕 vex.256.0F 58 /r : vaddps ymm, ymm, ymm/m256
😕 66 0F 58 /r : addpd xmm, xmm/m128
😕 vex.128.66.0F 58 /r : vaddpd xmm, xmm, xmm/m128
😕 vex.256.66.0F 58 /r : vaddpd ymm, ymm, ymm/m256
😕 F2 0F 58 /r : addsd xmm, xmm/m64
😕 vex.F2.0F 58 /r : vaddsd xmm, xmm, xmm/m64
😕 F3 0F 58 /r : addss xmm, xmm/m32
😕 vex.F3.0F 58 /r : vaddss xmm, xmm, xmm3/m32
😕 0F 5A /r : cvtps2pd xmm, xmm/m64
😕 vex.128.0F 5A /r : vcvtps2pd xmm, xmm/m64
😕 vex.256.0F 5A /r : vcvtps2pd ymm, xmm/m128
😕 66 0F 5A /r : cvtpd2ps xmm, xmm/m128
😕 vex.128.66.0F 5A /r : vcvtpd2ps xmm, xmm/m128
😕 vex.256.66.0F 5A /r : vcvtpd2ps xmm, ymm/m256
😕 F2 0F 5A /r : cvtsd2ss xmm, xmm/m64
😕 vex.F2.0F 5A /r : vcvtsd2ss xmm, xmm, xmm/m64
😕 F3 0F 5A /r : cvtss2sd xmm, xmm/m32
😕 vex.F3.0F 5A /r : cvtss2sd xmm, xmm, xmm/m32
😕 66 0F 5B /r : cvtps2dq xmm, xmm/m128
😕 vex.128.66.0F 5B /r : vcvtps2dq xmm, xmm/m128
😕 vex.256.66.0F 5B /r : vcvtps2dq ymm, ymm/m256
😕 F3 0F 5B /r : cvttps2dq xmm, xmm/m128
😕 vex.128.F3.0F 5B /r : vcvttps2dq xmm, xmm/m128
😕 vex.256.F3.0F 5B /r : vcvttps2dq ymm, ymm/m256
😕 0F 5E /r : divps xmm, xmm/m128
😕 vex.128.0F 5E /r : vdivps xmm, xmm, xmm/m128
😕 vex.256.0F 5E /r : vdivps ymm, ymm, ymm/m256
😕 66 0F 5E /r : divpd xmm1, xmm2/m128
😕 vex.128.66.0F 5E /r : vdivpd xmm, xmm, xmm/m128
😕 vex.256.66.0F 5E /r : vdivpd ymm, ymm, ymm/m256
😕 F2 0F 5E /r : divsd xmm, xmm/m64
😕 vex.F2.0F 5E /r : vdivsd xmm, xmm, xmm/m64
😕 F3 0F 5E /r : divss xmm, xmm/m32
😕 vex.F3.0F 5E /r : divss xmm, xmm, xmm/m32
😕 0F 77 : emms
😕 0F C2 /r ib : cmpps xmm, xmm/m128, imm8
😕 vex.128.0F C2 /r ib : vcmpps xmm, xmm, xmm/m128, imm8
😕 vex.256.0F C2 /r ib : vcmpps ymm, ymm, ymm/m256, imm8
😕 66 0F C2 /r ib: cmppd xmm, xmm/m128, imm8
😕 vex.128.66.0F C2 /r ib: vcmppd xmm, xmm, xmm/m128, imm8
😕 vex.256.66.0F C2 /r ib: vcmppd ymm, ymm, ymm/m128, imm8
😕 F2 0F C2 /r ib: cmpsd xmm, xmm/m128, imm8
😕 vex.128.F2.0F C2 /r ib: vcmpsd xmm, xmm, xmm/m128, imm8
😕 vex.256.F2.0F C2 /r ib: vcmpsd ymm, ymm, ymm/m128, imm8
😕 F3 0F C2 /r ib: cmpss xmm, xmm/m128, imm8
😕 vex.128.F3.0F C2 /r ib: vcmpss xmm, xmm, xmm/m128, imm8
😕 vex.256.F3.0F C2 /r ib: vcmpss ymm, ymm, ymm/m128, imm8
😕 66 0F D0 /r : addsubpd xmm, xmm/m128
😕 vex.128.66.0F D0 /r : vaddsubpd xmm, xmm, xmm/m128
😕 vex.256.66.0F D0 /r : vaddsubpd ymm, ymm, ymm/m256
😕 F2 0F D0 /r : addsubps xmm, xmm/m128
😕 vex.128.F2.0F D0 /r : vaddsubps xmm, xmm, xmm/m128
😕 vex.256.F2.0F D0 /r : vaddsubps ymm, ymm, ymm/m256
😕 66 0F E6 /r : cvttpd2dq xmm, xmm/m128
😕 vex.128.66.0F E6 /r : vcvttpd2dq xmm, xmm/m128
😕 vex.256.66.0F E6 /r : vcvttpd2dq xmm, ymm/m256
😕 F2 0F E6 /r : cvtdq2pq xmm, xmm/m128
😕 vex.128.F2.0F E6 /r : vcvtdq2pq xmm, xmm/m128
😕 vex.256.F2.0F E6 /r : vcvtdq2pq ymm, ymm/m256
😕 F3 0F E6 /r : cvtdq2pd xmm, xmm/m64
😕 vex.128.F3.0F E6 /r : vcvtdq2pd xmm, xmm/m64
😕 vex.256.F3.0F E6 /r : vcvtdq2pd ymm, ymm/m128