sandpile.org — x86 architecture — 1 byte opcodes

๐Ÿ”ฅ Explore this must-read post from Hacker News ๐Ÿ“–

๐Ÿ“‚ Category:

๐Ÿ“Œ Hereโ€™s what youโ€™ll learn:




x86 architecture
1 byte opcodes



































xxh ย 
x0h
ย 
x1h x2h x3h x4h x5h x6h x7h

ย 
0xh
ย 
ADD
Eb,Gb
ADD
Ev,Gv
ADD
Gb,Eb
ADD
Gv,Ev
ADD
AL,Ib
ADD
rAX,Iz
PUSHI64
ES
POPI64
ES
ย 
1xh
ย 
ADC
Eb,Gb
ADC
Ev,Gv
ADC
Gb,Eb
ADC
Gv,Ev
ADC
AL,Ib
ADC
rAX,Iz
PUSHI64
SS
POPI64
SS
ย 
2xh
ย 
AND
Eb,Gb
AND
Ev,Gv
AND
Gb,Eb
AND
Gv,Ev
AND
AL,Ib
AND
rAx,Iz
ES: DAAI64
ย 
3xh
ย 
XOR
Eb,Gb
XOR
Ev,Gv
XOR
Gb,Eb
XOR
Gv,Ev
XOR
AL,Ib
XOR
rAX,Iz
SS: AAAI64

ย 
4xh
ย !REX2ย 
INCI64 eAXย  INCI64 eCX INCI64 eDX INCI64 eBX INCI64 eSP INCI64 eBP INCI64 eSI INCI64 eDI
REX
ย 
5xh
ย 
PUSHD64
rAX / r8 / r16 / r24
PUSHD64
rCX / r9 / r17 / r25
PUSHD64
rDX / r10 / r18 / r26
PUSHD64
rBX / r11 / r19 / r27
PUSHD64
rSP / r12 / r20 / r28
PUSHD64
rBP / r13 / r21 / r29
PUSHD64
rSI / r14 / r22 / r30
PUSHD64
rDI / r15 / r23 / r31
REX2.W1 PUSHPF64ย Rq
ย 
6xh
ย 
PUSHAI64
PUSHADI64
(80186+)
POPAI64
POPADI64
(80186+)
BOUNDI64 Gv,Ma
(80186+)
ARPLI64 Ew,Gw
(80286+)
FS:
(80386+)


Hint Alt Taken
for Jcc (P4)
GS:
(80386+)
OPSIZE:
(80386+)
ADSIZE:
(80386+)
L1OM MVEX EVEX MOVSXDย  Gv,Ed
(PM64)
ย 
7xh
ย !REX2ย 
JODf64
Jb
JNODf64
Jb
JBDf64
Jb
JNBDf64
Jb
JZDf64 Jb JNZDf64 Jb JBEDf64
Jb
JNBEDf64
Jb
JKZDv64 vKw,Jbv
(K1OM)
JKNZDv64 vKw,Jbv
(K1OM)

ย 
8xh
ย 
group #1
Eb,Ib
group #1
Ev,Iz
group #1*I64
Eb,Ib
group #1
Ev,Ib
TEST
Eb,Gb
TEST
Ev,Gv
XCHG
Eb,Gb
XCHG
Ev,Gv
ย 
9xh
ย 
(F3h) PAUSE
XCHG rAX,rAX
ย 
XCHG rCX,rAXย 
XCHG ย ย r9,rAXย 
XCHG r17,rAX
XCHG r25,rAX
ย 
XCHG rDX,rAXย 
XCHG r10,rAXย 
XCHG r18,rAX
XCHG r26,rAX
ย 
XCHG rBX,rAXย 
XCHG r11,rAXย 
XCHG r19,rAX
XCHG r27,rAX
ย 
XCHG rSP,rAXย 
XCHG r12,rAXย 
XCHG r20,rAX
XCHG r28,rAX
ย 
XCHG rBP,rAXย 
XCHG r13,rAXย 
XCHG r21,rAX
XCHG r29,rAX
ย 
XCHG rSI,rAXย 
XCHG r14,rAXย 
XCHG r22,rAX
XCHG r30,rAX
ย 
XCHG rDI,rAXย 
XCHG r15,rAXย 
XCHG r23,rAX
XCHG r31,rAX
XCHG ย ย r8,rAX
XCHG r16,rAX
XCHG r24,rAX
ย 
Axh
ย !REX2ย 
MOV
AL,Ob
MOV
rAX,Ov
MOV
Ob,AL
MOV
Ov,rAX
MOVS
Yb,Xb
MOVS
Yv,Xv
CMPS
Yb,Xb
CMPS
Yv,Xv
REX2.W0
JMPABS Aq
ย 
Bxh
ย 
(!REX) MOV AL,Ib
ย (REX) MOV AL,Ib
MOV ย ย R8B,Ib
MOV R16B,Ib
MOV R24B,Ib
(!REX) MOV CL,Ib
ย (REX) MOV CL,Ib
MOV ย ย R9B,Ib
MOV R17B,Ib
MOV R25B,Ib
(!REX) MOV DL,Ib
ย (REX) MOV DL,Ib
MOV R10B,Ib
MOV R18B,Ib
MOV R26B,Ib
(!REX) MOV BL,Ib
ย (REX) MOV BL,Ib
MOV R11B,Ib
MOV R19B,Ib
MOV R27B,Ib
(!REX) MOV AH,Ib
(REX) MOV SPL,Ib
MOV R12B,Ib

MOV R20B,Ib
MOV R28B,Ib
(!REX) MOV CH,Ib
(REX) MOV BPL,Ib
MOV R13B,Ib

MOV R21B,Ib
MOV R29B,Ib
(!REX) MOV DH,Ib
(REX) ย MOV SIL,Ib
MOV R14B,Ib

MOV R22B,Ib
MOV R30B,Ib
(!REX) MOV BH,Ib
(REX) ย MOV DIL,Ib
MOV R15B,Ib

MOV R23B,Ib
MOV R31B,Ib

ย 
Cxh
ย 
group #2
Eb,Ib
(80186+)
group #2
Ev,Ib
(80186+)
RET nearDf64
Iw
RET nearDf64
ย 
LESI64 Gv,Mp (w:v) LDSI64 Gv,Mp (w:v) group #11
Eb,Ib
group #11
Ev,Iz
VEX3 VEX2
ย 
Dxh
ย 
group #2
Eb,1
group #2
Ev,1
group #2
Eb,CL
group #2
Ev,CL
ย AAMI64 Ib ย AADI64 Ib ย S(ET)ALCI64 XLAT
reserved REX2 L1OM UDB
ย 
Exh
ย !REX2ย 
LOOPNEDf64
LOOPNZDf64
Jb
LOOPEDf64
LOOPZDf64
Jb
ย 
LOOPDf64
Jb
JCXZDf64
JECXDf64
JRCXDf64
Jb
IN
AL,Ib
IN
eAX,Ib
OUT
Ib,AL
OUT
Ib,eAX
ย 
Fxh
ย 
LOCK: #UD (80186/80188)
UMPF: (80286)


INT1 aka ICEBP
(80386+)
ย 
REPNE:


BND: (MPX)
XACQUIRE: (HLE)
REP:
REPE:


ย 
XRELEASE: (HLE)
HLT CMC group #3
Eb
group #3
Ev

notes
on 90h
XCHG ย ย AX,ย ย AX โ€“ classic 16-bit NOP (8086) If CPUID does indicate support, then a REP prefix will apply PAUSE semantics to a NOP.
The blame for that “special treatment” of PM64 O32 NOP โ€“ effectively D64 โ€“ falls on me.

ย 

I did spot that zeroing the upper 32 bits of RAX leads to undesired non-NOP behavior, but

failed to convince our team in 2001 to use one of the freed up 1-byte opcodes (a la UDB).
XCHG eAX,eAX โ€“ wider 32-bit NOP (80386)
XCHG ย rAX,ย rAX โ€“ wider 64-bit NOP (x86-64) In PM64 with O32, XCHG EAX,EAX must not zero the upper 32 bits of RAX. Thus it is D64.
XCHG ย ย ย rN,ย rAX (N=8 ,16,24) is not a NOP!
























xxh ย 
x8h
ย 
x9h xAh xBh xCh xDh xEh xFh

ย 
0xh
ย 
OR
Eb,Gb
OR
Ev,Gv
OR
Gb,Eb
OR
Gv,Ev
OR
AL,Ib
OR
rAX,Iz





PUSHI64
CS

As of 2025 byte 0Eh
is in active use by a
corporate entity other
than Intel or AMD.


POP CS (8086/8088)
#UD (80186/80188)


2 byte opcodes
(80286+)
ย 
1xh
ย 
SBB
Eb,Gb
SBB
Ev,Gv
SBB
Gb,Eb
SBB
Gv,Ev
SBB
AL,Ib
SBB
rAX,Iz
PUSHI64
DS
POPI64
DS
ย 
2xh
ย 
SUB
Eb,Gb
SUB
Ev,Gv
SUB
Gb,Eb
SUB
Gv,Ev
SUB
AL,Ib
SUB
rAX,Iz
CS:
&nbsp


Hint Not Taken
for Jcc (P4)
DASI64
ย 
3xh
ย 
CMP
Eb,Gb
CMP
Ev,Gv
CMP
Gb,Eb
CMP
Gv,Ev
CMP
AL,Ib
CMP
rAX,Iz
DS:
CET: (CET)


Hint Taken
for Jcc (P4)
AASI64

ย 
4xh
ย !REX2ย 
DECI64 eAXย  DECI64 eCX DECI64 eDX DECI64 eBX DECI64 eSP DECI64 eBP DECI64 eSI DECI64 eDI
REX
ย 
5xh
ย 
POPD64
rAX / r8 / r16 / r24
POPD64
rCX / r9 / r17 / r25
POPD64
rDX / r10 / r18 / r26
POPD64
rBX / r11 / r19 / r27
POPD64
rSP / r12 / r20 / r28
POPD64
rBP / r13 / r21 / r29
POPD64
rSI / r14 / r22 / r30
POPD64
rDI / r15 / r23 / r31
REX2.W1 POPPF64ย Rq
ย 
6xh
ย 
PUSHD64
Iz
(80186+)
IMUL
Gv,Ev,Iz
(80186+)
PUSHD64
Ib
(80186+)
IMUL
Gv,Ev,Ib
(80186+)
INS
Yb,DX
(80186+)
INS
Yz,DX
(80186+)
OUTS
DX,Xb
(80186+)
OUTS
DX,Xz
(80186+)
ย 
7xh
ย !REX2ย 
JSDf64
Jb
JNSDf64
Jb
JPDf64
Jb
JNPDf64
Jb
JLDf64
Jb
JNLDf64
Jb
JLEDf64
Jb
JNLEDf64
Jb

ย 
8xh
ย 
MOV
Eb,Gb
MOV
Ev,Gv
MOV
Gb,Eb
MOV
Gv,Ev
MOV Mw,Sw
MOV Rv,Sw
LEA Gv,M
ย 
MOV Sw,Mw
MOV Sw,Rv
group #1A
ย 
9xh
ย 
CBW (8088)
CWDE (80386+)
CDQE (PM64)
CWD (8088)
CDQ (80386+)
CQO (PM64)
CALLI64
Ap (w:z)
WAIT
FWAIT
PUSHFD64
Fv
POPFD64
Fv
SAHF
(LM: if AHF64)
LAHF
(LM: if AHF64)
ย 
Axh
ย !REX2ย 
TEST
AL,Ib
TEST
rAX,Iz
STOS
Yb,AL
STOS
Yv,rAX
LODS
AL,Xb
LODS
rAX,Xv
SCAS
Yb,AL
SCAS
Yv,rAX
ย 
Bxh
ย 
MOV rAX,Iv
MOV ย ย r8,Iv
MOV r16,Iv
MOV r24,Iv
MOV rCX,Iv
MOV ย ย r9,Iv
MOV r17,Iv
MOV r25,Iv
MOV rDX,Iv
MOV r10,Iv
MOV r18,Iv
MOV r26,Iv
MOV rBX,Iv
MOV r11,Iv
MOV r19,Iv
MOV r27,Iv
MOV rSP,Iv
MOV r12,Iv
MOV r20,Iv
MOV r28,Iv
MOV rBP,Iv
MOV r13,Iv
MOV r21,Iv
MOV r29,Iv
MOV rSI,Iv
MOV r14,Iv
MOV r22,Iv
MOV r30,Iv
MOV rDI,Iv
MOV r15,Iv
MOV r23,Iv
MOV r31,Iv

ย 
Cxh
ย 
ENTERD64
Iw,Ib
(80186+)
LEAVED64
ย 
(80186+)
RET far
Iw
RET far
ย 
INT3 INT
Ib
INTOI64 IRET
ย 
Dxh
ย 
ESC
0
ESC
1
ESC
2
ESC
3
ESC
4
ESC
5
ESC
6
ESC
7
ย 
Exh
ย !REX2ย 
CALLDf64
Jz
JMPDf64
Jz
JMPI64
Ap (w:z)
JMPDf64
Jb
IN
AL,DX
IN
eAX,DX
OUT
DX,AL
OUT
DX,eAX
ย 
Fxh
ย 
CLC STC ย 
ย CLIย 
(F0h) CLX (REX32)
ย 
ย STIย 
(F0h) STX (REX32)
CLD STD group #4
INC/DEC
group #5
INC/DEC/etc.










On 8086/8088 processors the following behavior was supported instead.

















xxh ย 
x0h
ย 
x1h x2h x3h x4h x5h x6h x7h

ย 
6xh
ย 
JO*
Jb
JNO*
Jb
JB*
Jb
JNB*
Jb
JZ*
Jb
JNZ*
Jb
JBE*
Jb
JNBE*
Jb
ย 
7xh
ย 
JO
Jb
JNO
Jb
JB
Jb
JNB
Jb
JZ
Jb
JNZ
Jb
JBE
Jb
JNBE
Jb
ย 
8xh
ย 
group #1
Eb,Ib
group #1
Ew,Iw
group #1*
Eb,Ib
group #1
Ew,Ib
TEST
Eb,Gb
TEST
Ew,Gw
XCHG
Eb,Gb
XCHG
Ew,Gw
ย 
Cxh
ย 
RET* near
Iw
RET* near
ย 
RET near
Iw
RET near
ย 
LES Gw,Mp (w:w)
ย 
LDS Gw,Mp (w:w)
ย 
group #11
Eb,Ib
group #11
Ew,Iw
LES Gw,(IND:TMP)
ย 
LDS Gw,(IND:TMP)
ย 
ย 
Fxh
ย 
LOCK: LOCK:* REPNE: REP:
REPE:
HLT CMC group #3
Eb
group #3
Ew















xxh ย 
x8h
ย 
x9h xAh xBh xCh xDh xEh xFh

ย 
6xh
ย 
JS*
Jb
JNS*
Jb
JP*
Jb
JNP*
Jb
JL*
Jb
JNL*
Jb
JLE*
Jb
JNLE*
Jb
ย 
7xh
ย 
JS
Jb
JNS
Jb
JP
Jb
JNP
Jb
JL
Jb
JNL
Jb
JLE
Jb
JNLE
Jb
ย 
8xh
ย 
MOV
Eb,Gb
MOV
Ew,Gw
MOV
Gb,Eb
MOV
Gw,Ew
MOV Mw,Sw
MOV Rw,Sw
LEA Gv,M
ย 
MOV Sw,Mw
MOV Sw,Rw
group #1A
LEA Gv,IND
ย 
ย 
Cxh
ย 
RET* far
Iw
RET* far
ย 
RET far
Iw
RET far
ย 
INT3 INT
Ib
INTO IRET
ย 
Fxh
ย 
CLC STC CLI STI CLD STD group #4
INC/DEC
group #5
INC/DEC/etc.










note: The opcodes marked with * are aliases to other opcodes.








main page


ยฉ 1996-2025 by Christian Ludloff. All rights reserved. Use at your own risk.

๐Ÿ’ฌ Share your opinion below!

#๏ธโƒฃ #sandpile.org #x86 #architecture #byte #opcodes

๐Ÿ•’ Posted on 1761935413

By

Leave a Reply

Your email address will not be published. Required fields are marked *