Most instructions are compatible with the 8080 instruction set, with a few exceptions. Notations used in the description of the instructions include
r = Z80 8-bit Register |
rp = Register Pair |
rs = Register Source |
rx = Index Registers |
rd = Register Destination |
d= Displacement Byte |
m = Memory |
b = Bit |
( ) = contents of l6-bit Memory Address or 8-bit I/O Address |
1. Data Copy (Load) Instructions |
|||
Mnemonics |
Bytes |
Tasks |
|
Data (8 bits and 16 bits) copy or load in registers |
|||
LD rd, rs |
1 |
Copy data from source register rs into destination register rd. |
|
LD r, 8-bit |
2 |
Load 8-bit into a register. |
|
LD rp, 16-bit |
3 |
Load 16-bit into register pair. |
|
LD rx, 16-bit |
4 |
Load 16-bit data into index register. |
|
Data copy between registers and memory |
|||
LD A, (I6-bit) |
3 |
Load accumulator from memory; the address is specified by 16-bit operand. |
|
LD (I6-bit), A |
3 |
Load memory from accumulator; the memory address is specified by 16-bit operand. |
|
LD A, (rp) |
1 |
Load accumulator from memory; the memory address is specified by the contents of register pair. |
|
LD A, (rp) |
1 |
Load memory from accumulator; the memory address is given by the contents of register pair. |
|
LD (rp), A |
1 |
Load register from memory; the address is specified by 16-bit contents in HL. |
|
LD r, (HL) |
1 |
Load memory from register; the address is specified by 16-bit contents in HL. |
|
LD (HL), r |
3 |
Copy memory contents into register r; the memory address is obtained by adding the contents of index register and the displacement byte d. |
|
LD r,(rx + d) |
3 |
Copy register contents into memory address shown by index register and the displacement (rx + d). |
|
2. Arithmetic Instructions· |
|||
ADD A, r |
1 |
Add register contents to accumulator. |
|
ADD A, 8-bit |
2 |
Add 8-bit data to accumulator. |
|
ADD A, (HL) |
1 |
Add memory contents to accumulator; the memory address is specified by the contents in HL. |
|
SUB r |
1 |
Subtract contents of register from accumulator. |
|
SUB 8-bit |
2 |
Subtract 8-bit data from accumulator. |
|
SUB (HL) |
1 |
Subtract memory contents from accumulator; the memory address is specified by the contents of HL. |
|
INC r |
1 |
Increment the contents of a register, |
|
INC (HL) |
1 |
Increment the contents of memory; the memory address is specified by the contents of HL. |
|
INC rp |
1 |
Increment 16-bit contents in a register pair. |
|
DEC r |
1 |
Decrement the contents of a register. |
|
DEC (HL) |
1 |
Decrement the contents of memory; the memory address is specified by the contents of HL. |
|
DEC rp |
1 |
Decrement 16-bit contents in a register pair. |
|
3. Logic Instructions* |
|||
AND r |
1 |
Logically AND the contents of a register with the accumulator. |
|
AND 8-bit |
2 |
Logically AND 8-bit data with accumulator. |
|
AND (HL) |
1 |
Logically AND the contents of memory with accumulator; the memory address is specified by the contents of HL. |
|
CP r |
1 |
Compare the contents of register with accumulator for Jess than, equal to, or greater than. |
|
CP 8-bit |
1 |
Compare 8-bit data with accumulator for less than, equal to, or greater than. |
|
CP (HL) |
1 |
Compare the contents of memory with accumulator for less than, equal to, or greater than; the memory address is specified by the contents of HL. |
|
4. Bit Rotation |
|||
RLCA |
1 |
Rotate each bit in the accumulator to the left position. |
|
RLA |
1 |
Rotate each bit in the accumulator including the carry C to the left position. |
|
RRCA |
1 |
Rotate each bit in the accumulator to the right position. |
|
RRA |
1 |
Rotate each bit in the accumulator including the carry C to the right position. |
|
5. Branch Instructions |
|||
JP 16-bit |
3 |
Change the program sequence (Jump) to memory location specified by the l6-bit address. |
|
JP Z, l6-bit |
3 |
Change the program sequence (Jump) to memory location specified by the l6-bit address if ‘the Zero (Z) flag is set. |
|
JP NZ, l6-bit |
3 |
Change the program sequence (Jump) to memory location specified by the l6-bit address if the Zero (Z) flag is reset. |
|
JP C, l6-bit |
3 |
Change the program sequence (Jump) to memory location specified by the l6-bit address if the Carry (C) flag is set. |
|
JP NC, l6-bit |
3 |
Change the program sequence (Jump) to memory location specified by the l6-bit address if the Carry (C) flag is reset. |
|
CALL l6-bit |
3 |
Change the program sequence to the location of the subroutine. |
|
RET |
1 |
Return to the calling program after completing the subroutine sequence. |
|
6. Machine Control Instructions |
|||
HALT |
1 |
Suspend execution and wait. |
|
NOP |
1 |
Do not perform any operation. |
|
7. Bit Rotation* |
|||
RLC r |
2 |
Rotate each bit in register r to the left. |
|
RL r |
2 |
Rotate each bit in register r to the left, including Carry flag. |
|
SLA r |
2 |
Shift each bit in register r to the left. |
|
8. Bit Manipulation |
|||
BIT b, r |
2 |
Test bit b in register r, affecting the Z flag. |
|
SET b, r |
2 |
Set bit b in register r. ("b" represents bit position 0 to 7) |
|
RES b, r |
2 |
Reset bit b in register r. |
|
9. Z80 Special (Conditional) Repetitive Instructions. The Z80 instruction set in cludes several instructions that are automatically repeated until a specified register becomes zero. These instructions are quite efficient in dealing with block transfer or counter applications. Some of these instructions are as follows: |
|||
CPDR |
2 |
Compare memory contents specified by HL with the accumulator. Increment HL decrement BC, and repeat until BC =0, or A = contents of memory specified by HL. |
|
DJNZ d |
2 |
Decrement B, and if B ≠ 0, jump to memory address obtained by adding displacement byte to the program counter. |
|
INDR |
2 |
Read input port indicated by the C register, and store the byte in memory specified by HL register. Decrement B and HL, and continue until B = 0. |
|
OTDR |
2 |
Output the contents of memory specified by HL to port indicated by the C register. Decrement Band HL, and continue until B = 0. |
|