5.5 Instruction summary.
| Instruction | Op1 | Op2 | Operation | Addr mode dst src |
Opcode byte |
Flags affected C Z S V D H |
|---|---|---|---|---|---|---|
| ADC | dst | src | dst := dst + src + C | Note 1 | 1+ | * * * * 0 * |
| ADD | dst | src | dst := dst + src | Note 1 | 0+ | * * * * 0 * |
| AND | dst | src | dst := dst AND src | Note 1 | 5+ | - * * 0 - - |
| CALL | dst | SP := SP - 2 [SP] := PC PC := dst |
DA IRR |
D6 D4 |
- - - - - - | |
| CCF | C := NOT C | EF | * - - - - - | |||
| CLR | dst | dst := 0 | R IR |
B0 B1 |
- - - - - - | |
| COM | dst | dst := NOT dst | R IR |
60 61 |
- * * 0 - - | |
| CP | dst | src | FLAGS := (dst - src) | Note 1 | A+ | * * * * - - |
| DA | dst | Correct BCD math | R IR |
40 41 |
* * * X - - | |
| DEC | dst | dst := dst - 1 | R IR |
00 01 |
- * * * - - | |
| DECW | dst | dst := dst - 1 | RR IRR |
80 81 |
- * * * - - | |
| DI | Disable interrupts | 8F | - - - - - - | |||
| DJNZ | r | dst | r := r - 1 IF r # 0 THEN PC := PC + dst dst = [-128..127] |
RA | rA r=[0..F] |
- - - - - - |
| EI | Enable interrupts | 9F | - - - - - - | |||
| INC | dst | dst := dst + 1 | r R IR |
nE n=[0..F] 20 21 |
- * * * - - | |
| INCW | dst | dst := dst + 1 | RR IR |
A0 A1 |
- * * * - - | |
| IRET |
FLAGS := [SP] SP := SP + 1 PC := [SP] SP := SP + 2 |
BF | * * * * * * | |||
| JP | cc | dst | IF cc=TRUE THEN PC := dst | DA IRR |
nD n=[0..F] 30 |
- - - - - - |
| JR | cc | dst | IF cc=TRUE THEN PC := PC + dst dst = [-128..127] |
RA | nB n=[0..F] |
- - - - - - |
| LD | dst | src | dst := SRC |
r IM r R R r r X X r r Ir Ir r R R R IR R IM IR IM IR R |
rC r8 r9 r=[0..F] C7 D7 E3 F3 E4 E5 E6 E7 F5 |
- - - - - - |
| LDC | dst | src | dst := src | r Irr Irr r |
C2 D2 |
- - - - - - |
| LDCI | dst | src | dst := src r := r + 1 rr := rr + 1 |
Ir Irr Irr Ir |
C3 D3 |
- - - - - - |
| LDE | dst | src | dst := src | r Irr Irr r |
82 92 |
- - - - - - |
| LDEI | dst | src | dst := src r := r + 1 rr := rr + 1 |
Ir Irr Irr Ir |
83 93 |
- - - - - - |
| NOP | do nothing | FF | - - - - - - | |||
| OR | dst | src | dst := dst OR src | Note 1 | 4+ | - * * 0 - - |
| POP | dst | dst := [SP] SP := SP + 1 |
R IR |
50 51 |
- - - - - - | |
| PUSH | src | SP := SP - 1 [SP] := src |
R IR |
70 71 |
- - - - - - | |
| RCF | C := FALSE | CF | 0 - - - - - | |||
| RET | PC := [SP] SP := SP + 2 |
AF | - - - - - - | |||
| RL | dst | Rotate left dst Carry := dst (7) |
R IR |
90 91 |
* * * * - - | |
| RLC | dst | Rotate left dst dst (0) := Carry Carry := dst (7) |
R IR |
10 11 |
* * * * - - | |
| RR | dst | Rotate right dst Carry := dst (0) |
R IR |
E0 E1 |
* * * * - - | |
| RRC | dst | Rotate right dst Carry := dst (0) dst (7) := Carry |
R IR |
C0 C1 |
* * * * - - | |
| SBC | dst | src | dst := dst - src - C | Note 1 | 3+ | * * * * 1 * |
| SCF | C := TRUE | DF | 1 - - - - - | |||
| SRA | dst | dst (7) := dst (7) dst ([6..0]) := dst ([7..6]) |
R IR |
D0 D1 |
* * * 0 - - | |
| SRP | src | RP := src | Im | - - - - - - | ||
| SUB | dst | src | dst := dst - src | Note 1 | 2+ | * * * * 1 * |
| SWAP dst | dst |
tmp := dst ([0..3]) dst ([0..3]) := dst ([4..7]) dst ([4..7]) := tmp |
R IR |
F0 F1 |
X * * X - - | |
| TCM | dst | src | FLAGS := ( (NOT dst) AND src) | Note 1 | 6+ | - * * 0 - - |
| TM | dst | src | FLAGS := dst AND src | Note 1 | 7+ | - * * 0 - - |
| XOR | dst | src | dst := dst XOR src | Note 1 | B+ | - * * 0 - - |
These instructions have an identical set of addressing modes which are encoded for brevity. The first opcode
nibble is found in the instruction table above. The second nibble is expressed symbolically as a '+' in this
table and its value is found in the following table to the right of the applicable addressing mode pair.
For example, to determine the opcode of an 'ADC' instruction using the addressing modes 'r' (destination) and
Ir (source) is 13H.
| Addr mode dst src |
Lower Opcode byte |
| r r | 2 |
| r Ir | 3 |
| R R | 4 |
| R IR | 5 |
| R IM | 6 |
| IR IM | 7 |
Page equipped with FroogleBuster technology