You are on page 1of 2

http://csiflabs.cs.ucdavis.edu/~ssdavis/50/8086%20Opcodes.

pdf
ECS 50
Operation
ADC
ADD
ADD
ADD
ADD
ADD
ADD
ADD
ADD
ADD
AND
CALL
CALL
CLD
CMP
CMPSB
CMPW
DEC
DEC
DEC
DIV
DIV
HLT
IDIV
IDIV
IMUL
IMUL
IN
IN
IN
IN
INC
INC
INC
IRET
JA
JAE
JB
JBE
JE
JG
JGE
JL
JLE
JMP
JNE
JZ
LDS
LES
LODSB
LODSW

8086 Instruction Set Opcodes


Operands
see ADD
r/m8, reg8
r/m16, reg16
reg8, r/m8
reg16, r/m16
AL, imm8
AX, imm16
r/m8, imm8
r/m16, imm16
r/m16, imm8
see ADD
32-bit displacement
16-bit displacement

Opcode
ADD opcode + $10, and xx010xxx (ModR/M byte) for $80-$83
$00
$01
$02
$03
$04
$05
$80 xx000xxx (ModR/M byte)
$81 xx000xxx (ModR/M byte)
$83 xx000xxx (ModR/M byte)
ADD opcode + $20, and xx100xxx (ModR/M byte) for $80, $81,$83
$9A
$E8
$FC
See ADD
ADD opcode + $38, and xx111xxx (ModR/M byte) for $80, $81,$83
ES:[DI]==DS:[SI]
$A6
ES:[DI]==DS:[SI]
$A7
r/m8
$FE, xx001xxx (ModR/M byte)
r/m16
$FF, xx001xxx (ModR/M byte)
reg16
$48 + reg16 code
r/m8
$F6, xx110xxx (ModR/M byte)
r/m16
$F7, xx110xxx (ModR/M byte)
$F4
r/m8
$F6, xx111xxx (ModR/M byte)
r/m16
$F7, xx111xxx (ModR/M byte)
r/m8
$F6, xx101xxx (ModR/M byte)
r/m16
$F7, xx101xxx (ModR/M byte)
AL, addr8
$E4
AX, addr8
$E5
AL, port[DX]
$EC
AX, port[DX]
$ED
r/m8
$FE, xx000xxx (ModR/M byte)
r/m16
$FF, xx000xxx (ModR/M byte)
reg16
$40 + reg16 code
48-bit POP
$CF
8-bit relative
$77
8-bit relative
$73
8-bit relative
$72
8-bit relative
$76
8-bit relative
$74
8-bit relative
$7F
8-bit relative
$7D
8-bit relative
$7C
8-bit relative
$7E
32-bit displacement $EA
8-bit relative
$75
8-bit relative
$74
reg16, mem32
$C4
reg16, mem32
$C5
AL = DS:[SI]
$AC
AX = DS:[SI]
$AD

LOOP
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOVSB
MOVSW
MUL
MUL
NEG
NEG
NOT
NOT
OR
OUT
OUT
OUT
OUT
POP
POP
POP
PUSH
PUSH
PUSH
REP
REPNE
RET
RET
SBB
SCASB
SCASW
STD
STOSB
STOSW
SUB
XOR

8-bit relative
r/m8, reg8
r/m16, reg16
AL, mem8
AX, mem16
mem8, AL
mem16, AX
reg8, imm8
reg16,imm16
r/m8, imm8
r/m16, imm16
r/m16,sreg
sreg, r/m16
ES:[DI] = DS:[SI]
ES:[DI] = DS:[SI]
r/m8
r/m16
r/m8
r/m16
r/m8
r/m16
see ADD
addr8, AL
addr8, AX
port[DX], AL
port[DX], AX
r/m16
reg16
sreg
r/m16
reg16
sreg

32-bit POP
16-bit POP
see ADD
ES:[DI] == AL
ES:[DI] == AX
ES:[DI] = AL
ES:[DI] = AX
see ADD
see ADD

$E2
$88
$89
$A0
$A1
$A2
$A3
$B0 + reg8 code
$B8 + reg16 code
$C6, xx000xxx(ModR/M byte)
$C7, xx000xxx(ModR/M byte)
$8C, xx0 sreg xxx(ModR/M byte)
$8E, xx0 sreg xxx(ModR/M byte)
$A4
$A5
$F6, xx100xxx (ModR/M byte)
$F7, xx100xxx (ModR/M byte)
$F6, xx011xxx (ModR/M byte)
$F7, xx011xxx (ModR/M byte)
$F6, xx010xxx (ModR/M byte)
$F7, xx010xxx (ModR/M byte)
ADD opcode + $08, and xx001xxx (ModR/M byte) for $80, $81,$83
$E6
$E7
$EE
$EF
$8F
$58 + reg16 code
$07 + ES = 0, CS = 8, SS = $10, DS = $18
$FF, xx110xxx (ModR/M byte)
$50 + reg16 code
$06 + ES = 0, CS = 8, SS = $10, DS = $18
$F3
$F2
$CA
$C2
ADD opcode + $18, and xx011xxx (ModR/M byte) for $80, $81,$83
$AE
$AF
$FD
$AA
$AB
ADD opcode + $28, and xx101xxx (ModR/M byte) for $80, $81,$83
ADD opcode + $30, and xx110xxx (ModR/M byte) for $80, $81,$83

addr8 = 8-bit address of I/O port


reg8 = AL = 0, CL = 1, DL = 2, BL = 3, AH =4, CH = 5, DH = 6, BH = 7
reg16 = AX = 0, CX =1, DX =2, BX =3, SP = 4, BP = 5, SI = 6, DI = 7
sreg = ES = 0, CS = 1, SS = 2, DS = 3
mem8 = memory byte (direct addressing only)
mem16 = memory word (direct addressing only)
r/m8 = reg8 or mem8
r/m16 = reg16 or mem16
imm8 = 8 bit immediate
imm16 = 16 bit immediate

You might also like