x86 Instruction Set Encoding

You can use keypresses including digits to toggle between x86 architecture versions.

Key
    Data transfer
    Arithmetic
    Logic
    String manipulation
    Control transfer
    Processor control
    Protection control
    1 byte
    2 bytes
    3 bytes
    4 bytes
    5 bytes
    1 byte + imm (2-3 bytes)
    1 byte + r/m (2-4 bytes)
    1 byte + r/m + imm (3-6 bytes)
Instructions
Bits [0,3]
Bits [4,7] 0 1 2 3 4 5 6 7 8 9 a b c d e f
0 add r/m, reg8 add r/m, reg16 add reg8, r/m add reg16, r/m add al, imm8 add ax, imm16 push es pop es or r/m, reg8 or r/m, reg16 or reg8, r/m or reg16, r/m or al, imm8 or ax, imm16 push cs pop cs undefined extension
1 adc r/m, reg8 adc r/m, reg16 adc reg8, r/m adc reg16, r/m adc al, imm8 adc ax, imm16 push ss pop ss sbb r/m, reg8 sbb r/m, reg16 sbb reg8, r/m sbb reg16, r/m sbb al, imm8 sbb ax, imm16 push ds pop ds
2 and r/m, reg8 and r/m, reg16 and reg8, r/m and reg16, r/m and al, imm8 and ax, imm16 es: daa sub r/m, reg8 sub r/m, reg16 sub reg8, r/m sub reg16, r/m sub al, imm8 sub ax, imm16 cs: das
3 xor r/m, reg8 xor r/m, reg16 xor reg8, r/m xor reg16, r/m xor al, imm8 xor ax, imm16 ss: aaa cmp r/m, reg8 cmp r/m, reg16 cmp reg8, r/m cmp reg16, r/m cmp al, imm8 cmp ax, imm16 ds: aas
4 inc ax inc cx inc dx inc bx inc sp inc bp inc si inc di dec ax dec cx dec dx dec bx dec sp dec bp dec si dec di
5 push ax push cx push dx push bx push sp push bp push si push di pop ax pop cx pop dx pop bx pop sp pop bp pop si pop di
6 unpredictable pusha unpredictable popa unpredictable bound reg16, r/m unpredictable undefined arpl r/m, reg16 unpredictable undefined fs: unpredictable undefined gs: unpredictable undefined operand size unpredictable undefined address size unpredictable push imm16 unpredictable imul reg, r/m, imm16 unpredictable push imm8 unpredictable imul reg, r/m, imm8 unpredictable insb unpredictable insw unpredictable outsb unpredictable outsw
7 jo imm8 jno imm8 jc/jb/jnae imm8 jnc/jnb/jae imm8 jz/je imm8 jnz/jne imm8 jbe/jna imm8 jnbe/ja imm8 js imm8 jns imm8 jp/jpe imm8 jnp/jpo imm8 jl/jnge imm8 jnl/jge imm8 jle/jng imm8 jnle/jg imm8
8 op r/m, imm8 op r/m, imm16 op r/m, imm8 op r/m16, imm8 test reg8, r/m test reg16, r/m xchg reg8, r/m xchg reg16, r/m mov r/m, reg8 mov r/m, reg16 mov reg8, r/m mov reg16, r/m mov r/m, seg16 lea reg16, r/m mov seg16, r/m pop r/m
9 xchg ax, ax nop xchg ax, cx xchg ax, dx xchg ax, bx xchg ax, sp xchg ax, bp xchg ax, si xchg ax, di cbw cbw/cwde cwd cwd/cdq call imm16:imm16 wait pushf popf sahf lahf
a mov al, mem16 mov ax, mem16 mov mem16, al mov mem16, ax movsb movsw cmpsb cmpsw test al, imm8 test ax, imm16 stosb stosw lodsb lodsw scasb scasw
b mov al, imm8 mov cl, imm8 mov dl, imm8 mov bl, imm8 mov ah, imm8 mov ch, imm8 mov dh, imm8 mov bh, imm8 mov ax, imm16 mov cx, imm16 mov dx, imm16 mov bx, imm16 mov sp, imm16 mov bp, imm16 mov si, imm16 mov di, imm16
c unpredictable shift r/m8, imm8 unpredictable shift r/m16, imm8 ret imm16 ret les reg16, r/m lds reg16, r/m mov r/m, imm8 mov r/m, imm16 unpredictable enter imm16, imm8 unpredictable leave retf imm16 retf int3 int imm8 into iret
d shift r/m8, 1 shift r/m16, 1 shift r/m8, cl shift r/m16, cl aam imm8 aad imm8 salc xlat esc imm6, r/m
e loopnz/loopne imm8 loopz/loope imm8 loop imm8 jcxz imm8 in al, imm8 in ax, imm8 out imm8, al out imm8, ax call imm16 jmp imm16 jmp imm16:imm16 jmp imm8 in al, dx in ax, dx out dx, al out dx, ax
f lock unpredictable undefined user int1 repnz repz hlt cmc op r/m8[, imm8] op r/m16[, imm16] clc stc cli sti cld std inc/dec r/m8 op r/m16
Secondary opcodes
Bits [3, 5]
Primary opcode(s) 0 1 2 3 4 5 6 7
80-83 add or adc sbb and sub xor cmp
d0-d3 rol ror rcl rcr shl/sal shr unpredictable sar
f6-f7 test undefined not neg mul imul div idiv
fe inc dec undefined undefined undefined undefined undefined undefined
ff inc dec call near call far jmp near jmp far push undefined
Extended Instructions
Bits [0,3]
Bits [4,7] 0 1 2 3 4 5 6 7 8 9 a b c d e f
0 op r/m16 op r/m16 lar reg16, r/m lsl reg16, r/m storeall undefined loadall undefined syscall clts undefined loadalld undefined sysret undefined invd undefined wbinvd undefined undefined ud2 undefined undefined undefined undefined
1 undefined umov r/m, reg8 undefined umov r/m, reg16 undefined umov reg8, r/m undefined umov reg16, r/m undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined
2 undefined mov reg32, crn undefined mov reg32, drn undefined mov crn, reg32 undefined mov drn, reg32 undefined mov reg32, trn undefined undefined mov trn, reg32 undefined undefined undefined undefined undefined undefined undefined undefined undefined
3 undefined wrmsr undefined rdtsc undefined rdmsr undefined rdpmc undefined sysenter undefined sysexit undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined
4 undefined cmovo reg, r/m undefined cmovno reg, r/m undefined cmovc/cmovb/cmovnae reg, r/m undefined cmovnc/cmovnb/cmovae reg, r/m undefined cmovz/cmove reg, r/m undefined cmovnz/cmovne reg, r/m undefined cmovbe/cmovna reg, r/m undefined cmovnbe/cmova reg, r/m undefined cmovs reg, r/m undefined cmovns reg, r/m undefined cmovp/cmovpe reg, r/m undefined cmovnp/cmovpo reg, r/m undefined cmovl/cmovnge reg, r/m undefined cmovnl/cmovge reg, r/m undefined cmovle/cmovng reg, r/m undefined cmovnle/cmovg reg, r/m
5 undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined
6 undefined punpcklbw mm, mm/m32 undefined punpcklwd mm, mm/m32 undefined punpckldq mm, mm/m32 undefined packsswb mm, mm/m64 undefined pcmpgtb mm, mm/m64 undefined pcmpgtw mm, mm/m64 undefined pcmpgtd mm, mm/m64 undefined packuswb mm, mm/m64 undefined punpckhbw mm, mm/m64 undefined punpckhwd mm, mm/m64 undefined punpckhdq mm, mm/m64 undefined packssdw mm, mm/m64 undefined undefined undefined movd mm, r/m undefined movq mm, mm/m64
7 undefined undefined pshimw mm, imm8 undefined pshimd mm, imm8 undefined pshimq mm, imm8 undefined pcmpeqb mm, mm/m64 undefined pcmpeqw mm, mm/m64 undefined pcmpeqd mm, mm/m64 undefined emms undefined undefined undefined undefined undefined undefined undefined movd r/m, mm undefined movq mm/m64, mm
8 undefined jo imm undefined jno imm undefined jc/jb/jnae imm undefined jnc/jnb/jae imm undefined jz/je imm undefined jnz/jne imm undefined jbe/jna imm undefined jnbe/ja imm undefined js imm undefined jns imm undefined jp/jpe imm undefined jnp/jpo imm undefined jl/jnge imm undefined jnl/jge imm undefined jle/jng imm undefined jnle/jg imm
9 undefined opo r/m undefined opno r/m undefined opc/opb/opnae r/m undefined opnc/opnb/opae r/m undefined opz/ope r/m undefined opnz/opne r/m undefined opbe/opna r/m undefined opnbe/opa r/m undefined ops r/m undefined opns r/m undefined opp/oppe r/m undefined opnp/oppo r/m undefined opl/opnge r/m undefined opnl/opge r/m undefined ople/opng r/m undefined opnle/opg r/m
a undefined push fs undefined pop fs undefined cpuid undefined bt r/m, reg undefined shld r/m, reg, imm8 undefined shld r/m, reg, cl undefined xbts reg, r/m undefined undefined ibts r/m, reg undefined undefined push gs undefined pop gs undefined rsm undefined bts r/m, reg undefined shrd r/m, reg, imm8 undefined shrd r/m, reg, cl undefined undefined imul reg, r/m
b undefined cmpxchg r/m, reg8 undefined cmpxchg r/m, reg16 undefined lss reg16, r/m undefined btr r/m, reg undefined lfs reg16, r/m undefined lgs reg16, r/m undefined movzx reg16, r/m8 undefined movzx reg32, r/m16 undefined undefined ud1 reg, r/m undefined op r/m, imm8 undefined btc r/m, reg undefined bsf reg, r/m undefined bsr reg, r/m undefined movsx reg16, r/m8 undefined movsx reg32, r/m16
c undefined xadd r/m, reg8 undefined xadd r/m, reg16 undefined undefined undefined undefined undefined undefined cmpxchg8b mem64 undefined bswap ax/eax undefined bswap cx/ecx undefined bswap dx/edx undefined bswap bx/ebx undefined bswap sp/esp undefined bswap bp/ebp undefined bswap si/esi undefined bswap di/edi
d undefined undefined psrlw mm, mm/m64 undefined psrld mm, mm/m64 undefined psrlq mm, mm/m64 undefined undefined pmullw mm, mm/m64 undefined undefined undefined psubusb mm, mm/m64 undefined psubusw mm, mm/m64 undefined undefined pand mm, mm/m64 undefined paddusb mm, mm/m64 undefined paddusw mm, mm/m64 undefined undefined pandn mm, mm/m64
e undefined undefined psraw mm, mm/m64 undefined psrad mm, mm/m64 undefined undefined undefined pmulhw mm, mm/m64 undefined undefined undefined psubsb mm, mm/m64 undefined psubsw mm, mm/m64 undefined undefined por mm, mm/m64 undefined paddsb mm, mm/m64 undefined paddsw mm, mm/m64 undefined undefined pxor mm, mm/m64
f undefined undefined psllw mm, mm/m64 undefined pslld mm, mm/m64 undefined psllq mm, mm/m64 undefined undefined pmaddwd mm, mm/m64 undefined undefined undefined psubb mm, mm/m64 undefined psubw mm, mm/m64 undefined psubd mm, mm/m64 undefined undefined paddb mm, mm/m64 undefined paddw mm, mm/m64 undefined paddd mm, mm/m64 undefined ud0
Secondary opcodes
Bits [3, 5]
Primary opcode(s) 0 1 2 3 4 5 6 7
00 sldt str lldt ltr verr verw undefined undefined invlpg
01 sgdt sidt lgdt lidt smsw undefined lmsw undefined
71-73 undefined undefined undefined psrl undefined undefined psra undefined undefined psll undefined
90-9f set undefined undefined undefined undefined undefined undefined undefined
ba undefined undefined undefined undefined bt bts btr btc