-
8080 Instruction Set
Conventions in instruction source:
D = Destination register (8 bit) S = Source register (8 bit)
RP = Register pair (16 bit)
# = 8 or 16 bit immediate operand a = 16 bit Memory address
p = 8 bit port address ccc = Conditional
Conventions in instruction encoding: db = Data byte (8 bit)
lb = Low byte of 16 bit value hb = High byte of 16 bit value pa = Port address (8 bit)
Dest and Source reg fields: 111=A (Accumulator) 000=B
001=C
010=D
011=E
100=H
101=L
110=M (Memory reference through address in H:L)
Register pair 'RP' fields:
00=BC (B:C as 16 bit register) 01=DE (D:E as 16 bit register) 10=HL (H:L as 16 bit register)
11=SP (Stack pointer, refers to PSW (FLAGS:A) for PUSH/POP)
Condition code 'CCC' fields: (FLAGS: S Z x A x P x C) 000=NZ (Zero flag not set)
001=Z (Zero flag set) 010=NC (Carry flag not set) 011=C (Carry flag set)
100=PO (Parity flag not set - ODD) 101=PE (Parity flag set - EVEN) 110=P (Sign flag not set - POSITIVE) 111=M (Sign flag set - MINUS)
Inst
Encoding
Flags
Description
ACI
#
11001110
db
ZSCPA
Add
immediate to A with carry*
ADC
S
10001SSS
ZSCPA
Add
register to A with carry
ADD
S
10000SSS
ZSPCA
Add
register to A
ADI
#
11000110
db
ZSCPA
Add
immediate to A
ANA
S
10100SSS
ZSCPA
AND
register with A
ANI
#
11100110
db
ZSPCA
AND
immediate with A
CALL
a
11001101
lb
hb
-
Unconditional subroutine call
Cccc
a
11CCC100
lb
hb
-
Conditional subroutine call
CMA
00101111
-
Complement A
CMC
00111111
C
Complement Carry flag
CMP
S
10111SSS
ZSPCA
Compare register with A
CPI
#
11111110
ZSPCA
Compare immediate with A
DAA
00100111
ZSPCA
Decimal Adjust accumulator
DAD
R
P
00RP1001
C
Add register pair to HL (16 bit add)*
DCR
D
00DDD101
ZSPA
Decrement register*
DCX
R
P
00RP1011
-
Decrement register pair
DI
11110011
-
Disable interrupts
EI
11111011
-
Enable interrupts
HLT
01110110
-
Halt processor
IN p
11011011
pa
-
Read input port into A
INR
D
00DDD100
ZSPA
Increment register
INX
Jccc
R
P
a
00RP0011
11CCC010
lb
hb
-
-
Increment register pair
Conditional jump*
JMP
a
11000011
lb
hb
-
Unconditional jump*
LDA
a
00111010
lb
hb
-
Load A from memory
LDAX
RP
00RP1010
*1
-
Load indirect through BC or DE
LHLD
a
00101010
lb
hb
-
Load H:L from memory*
LXI
R
P,#
00RP0001
lb
hb
-
Load register pair immediate*
MOV
D
,S
01DDDSSS
-
Move register to register*
MVI
D
,#
00DDD110
db
-
Move immediate to register*
NOP
00000000
-
No operation
ORA
S
10110SSS
ZSPCA
OR register with A
ORI
#
11110110
ZSPCA
OR immediate with A
OUT
p
11010011
pa
-
Write A to output port
PCHL
11101001
-
Jump to address in H:L
POP
R
P
11RP0001
*2
*2
Pop register pair from the stack
PUSH
RP
11RP0101
*2
-
Push register pair on the stack
RAL
00010111
C
Rotate A left through carry*
RAR
00011111
C
Rotate A right through carry
Rccc
11CCC000
-
Conditional return from subroutine
RET
11001001
-
Unconditional return from subroutine
RLC
00000111
C
Rotate A left
RRC
00001111
C
Rotate A right
RST
n
11NNN111
-
Restart (Call n*8)
SBB
S
10011SSS
ZSCPA
Subtract register from A with borrow
SBI
#
11011110
db
ZSCPA
Subtract immediate from A with borrow
SHLD
a
00100010
lb
hb
-
Store H:L to memory*
SPHL
11111001
-
Set SP to content of H:L
STA
a
00110010
lb
hb
-
Store A to memory
STAX
RP
00RP0010
*1
-
Store indirect through BC or DE
STC
00110111
C
Set Carry flag
SUB
S
10010SSS
ZSCPA
Subtract register from A
SUI
#
11010110
db
ZSCPA
Subtract immediate from A
XCHG
11101011
-
Exchange DE and HL content
XRA
S
10101SSS
ZSPCA
Exclusive OR register with A
XRI
#
11101110
db
ZSPCA
Exclusive OR immediate with A
XTHL
11100011
-
Swap H:L with top word on stack
*1 = Only RP=00(BC) and 01(DE) are allowed for LDAX/STAX
*2 = RP=11 refers to PSW for PUSH/POP (cannot push/pop SP).
When PSW is POP'd, ALL flags are affected.
Encoding
Inst
Flags
Description
00000000
NOP
-
No operation
00000111
RLC
C
Rotate A left
00001111
RRC
C
Rotate A right
00010111
RAL
C
Rotate A left through carry*
00011111
RAR
C
Rotate A right through carry
00100010
lb
hb
SHLD
a
-
Store H:L to memory*
00100111
DAA
ZSPCA
Decimal Adjust accumulator
00101010
lb
hb
LHLD
a
-
Load H:L from memory*
00101111
CMA
-
Complement A
00110010
lb
hb
STA
a
-
Store A to memory
00110111
STC
C
Set Carry flag
00111010
lb
hb
LDA
a
-
Load A from memory
00111111
CMC
C
Complement Carry flag
00DDD100
INR
D
ZSPA
Increment register
00DDD101
DCR
D
ZSPA
Decrement register*
00DDD110
db
MVI
D,#
-
Move immediate to register*
00RP0001
lb
hb
LXI
RP,#
-
Load register pair immediate*
00RP0010
*1
STAX RP
- Store indirect through BC or DE
00RP0011
INX RP
- Increment register pair
00RP1001
DAD RP
C Add register pair to HL (16 bit add)*
00RP1010
*1
LDAX RP
- Load indirect through BC or DE
00RP1011
DCX RP
- Decrement register pair
01110110
HLT
- Halt processor
01DDDSSS
MOV D,S
- Move register to register*
10000SSS
ADD S
ZSPCA Add register to A
10001SSS
ADC S
ZSCPA Add register to A with carry
10010SSS
SUB S
ZSCPA Subtract register from A
10011SSS
SBB S
ZSCPA Subtract register from A with borrow
10100SSS
ANA S
ZSCPA AND register with A
10101SSS
XRA S
ZSPCA Exclusive OR register with A
10110SSS
ORA S
ZSPCA OR register with A
10111SSS
CMP S
ZSPCA Compare register with A
11000011
lb
hb
JMP a
- Unconditional jump*
11000110
db
ADI #
ZSCPA Add immediate to A
11001001
RET
- Unconditional return from subroutine
11001101
lb
hb
CALL a
- Unconditional subroutine call
11001110
db
ACI
#
ZSCPA
Add immediate to A with carry*
11010011
pa
OUT
p
-
Write A to output port
11010110
db
SUI
#
ZSCPA
Subtract immediate from
A
11011011
pa
IN p
-
Read input port into A
11011110
db
SBI
#
ZSCPA
Subtract immediate from
A with borrow
11100011 XTHL - Swap H:L with top word on stack
11100110
db
ANI
#
ZSPCA
AND immediate with
A
11101001
PCHL
-
Jump to address in
H:L
11101011
XCHG
-
Exchange DE and HL
content
11101110
db
XRI
#
ZSPCA Exclusive OR immediate with A
11110011
DI
- Disable interrupts
11110110
ORI
#
ZSPCA OR immediate with A
11111001
SPHL
- Set SP to content of H:L
11111011
EI
- Enable interrupts
11111110
CPI
#
ZSPCA Compare immediate with A
11CCC000
Rccc
- Conditional return from subroutine
11CCC010
lb
hb
Jccc
a
- Conditional jump*
11CCC100
lb
hb
Cccc
a
- Conditional subroutine call
11NNN111
RST
n
- Restart (Call n*8)
11RP0001
*2
POP
R
P
*2 Pop register pair from the stack
11RP0101 *2 PUSH RP - Push register pair on the stack
*1 = Only RP=00(BC) and 01(DE) are allowed for LDAX/STAX
*2 = RP=11 refers to PSW for PUSH/POP (cannot push/pop SP).
When PSW is POP'd, ALL flags are affected.