Skip to content

PhuwadonV/x64-Machine-code

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Purpose

  • 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

Link

Disassembler
Intel Manual

Instruction Format

Order

[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]*

Operand size

ib : imm8
iw : imm16
id : imm32
iq : imm64

Operand /digit

/0 : 00 - 07
/1 : 08 - 0F
/2 : 10 - 17
/3 : 18 - 1F
/4 : 20 - 27
/5 : 28 - 2F
/6 : 30 - 37
/7 : 28 - 3F

Operand ModR/M ( /r )

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

SIB ( Scale * Index + Base )

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

VEX

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

  • 0b0 : REX.R = 1
  • 0b1 : REX.R = 0

X : REX.X in 1’s complement

  • 0b0 : REX.X = 1
  • 0b1 : REX.X = 0

B : REX.B in 1’s complement

  • 0b0 : REX.B = 1
  • 0b1 : REX.B = 0

W : REX.W

m-mmmm

  • 0b0-0000 : Reserved for future use
  • 0b0-0001 : implied 0F leading opcode byte
  • 0b0-0010 : implied 0F 38 leading opcode byte
  • 0b0-0011 : implied 0F 3A leading opcode byte
  • 0b0-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

  • 0b0 : 128-bit vector | scalar
  • 0b1 : 256-bit vector

pp : Prefix

  • 0b00 : None
  • 0b01 : 0x66
  • 0b10 : 0xF3
  • 0b11 : 0xF2

Machine code

Prefix

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

REX ( Flag )

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

VEX

C4 ?? ??    : 3-byte prefix
C5 ??      : 2-byte prefix

EVEX

62 ?? ?? ?? : 4-byte prefix

Prefix-like

    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

Opcode

💚 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

More Opcodes

😕   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

More Opcodes ( SIMD )

😕     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

Releases

No releases published

Packages