- 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
: implied0F
leading opcode byte - 0b
0
-0010
: implied0F 38
leading opcode byte - 0b
0
-0011
: implied0F 3A
leading opcode byte - 0b
0
-0100
- 0b11111
: Reserved for future use
2-byte VEX ( 0xC5 ) : implied
0F
leading 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