jb302@42: ELB816 instruction set V1.0 jb302@42: jb302@42: Dec HEX Binary Mnemonic Register transfer description Comments jb302@42: 0 00 00000000 NOP PC = PC+1 No Operation jb302@42: 1 01 00000001 reserved currently unallocated opcode - treat as NOP jb302@42: 2 02 00000010 reserved currently unallocated opcode - treat as NOP jb302@42: 3 03 00000011 reserved currently unallocated opcode - treat as NOP jb302@42: 4 04 00000100 reserved currently unallocated opcode - treat as NOP jb302@42: 5 05 00000101 reserved currently unallocated opcode - treat as NOP jb302@42: 6 06 00000110 reserved currently unallocated opcode - treat as NOP jb302@42: 7 07 00000111 reserved currently unallocated opcode - treat as NOP jb302@42: 8 08 00001000 SET C 1 -> CY Set carry bit to 1 jb302@42: 9 09 00001001 CLR C 0 -> CY Set carry bit to 0 jb302@42: 10 0A 00001010 SET BS 1 -> BS Switch to register bank 1 jb302@42: 11 0B 00001011 CLR BS 0 -> BS Switch to register bank 0 jb302@42: 12 0C 00001100 SET IE 1 -> IE Enable interrupts jb302@42: 13 0D 00001101 CLR IE 0 -> IE Disable interrupts jb302@42: 14 0E 00001110 CPL C not CY -> CY Complement carry bit jb302@42: 15 0F 00001111 CPL A not A -> A Complement accumulator jb302@42: 16 10 00010000 XCSD SP -> DPTR : DPTR -> SP Exchange SP with DPTR jb302@42: 17 11 00010001 SFA FLAGS -> A store flags to accumulator jb302@42: 18 12 00010010 LAF A -> FLAGS load accumulator to flags jb302@42: 19 13 00010011 MOV DPTR, SP SP -> DPTR move word SP to DPTR jb302@42: 20 14 00010100 MOV SP, DPTR DPTR -> SP move word DPTR to SP jb302@42: 21 15 00010101 MOV A, #data8 data8 -> A move immediate byte to accumulator jb302@42: 22 16 00010110 MOV SP, #data16 data16 -> SP move immediate word to SP jb302@42: 23 17 00010111 MOV DPTR, #data16 data16 -> DPTR move immediate word to DPTR jb302@42: 24 18 00011000 MOV A, addr16 main[addr16] -> A move data from direct address to accumulator jb302@42: 25 19 00011001 MOV addr16, A A -> main[addr16] move data from accumulator to direct address jb302@42: 26 1A 00011010 MOV A, @A+DPTR main[DPTR+A] -> A indexed move relative to DPTR to accumulator jb302@42: 27 1B 00011011 MOV A, @A+PC main[PC+A] -> A indexed move relative to PC to accumulator jb302@42: 28 1C 00011100 MOV A, @addr16 main[main[addr16]] -> A move data from indirect address to accumulator jb302@42: 29 1D 00011101 MOV @addr16, A A -> main[main[addr16]] move data from accumulator to indirect address jb302@42: 30 1E 00011110 MOV A, @DPTR main[DPTR] -> A register indirect move to accumulator jb302@42: 31 1F 00011111 MOV @DPTR, A A -> main[DPTR] register indirect move from accumulator jb302@42: 32 20 00100000 MOV @DPTR, R0 R0 -> main[DPTR] jb302@42: 33 21 00100001 MOV @DPTR, R1 R1 -> main[DPTR] jb302@42: 34 22 00100010 MOV @DPTR, R2 R2 -> main[DPTR] jb302@42: 35 23 00100011 MOV @DPTR, R3 R3 -> main[DPTR] jb302@42: 36 24 00100100 MOV @DPTR, DPH DPH -> main[DPTR] jb302@42: 37 25 00100101 MOV @DPTR, DPL DPL -> main[DPTR] jb302@42: 38 26 00100110 MOV @DPTR, SPH SPH -> main[DPTR] jb302@42: 39 27 00100111 MOV @DPTR, SPL SPL -> main[DPTR] jb302@42: 40 28 00101000 MOV R0, #data8 data8 -> R0 jb302@42: 41 29 00101001 MOV R1, #data8 data8 -> R1 jb302@42: 42 2A 00101010 MOV R2, #data8 data8 -> R2 jb302@42: 43 2B 00101011 MOV R3, #data8 data8 -> R3 jb302@42: 44 2C 00101100 MOV DPH, #data8 data8 -> DPH jb302@42: 45 2D 00101101 MOV DPL, #data8 data8 -> DPL jb302@42: 46 2E 00101110 MOV SPH, #data8 data8 -> SPH jb302@42: 47 2F 00101111 MOV SPL, #data8 data8 -> SPL jb302@42: 48 30 00110000 MOV R0, A A -> R0 jb302@42: 49 31 00110001 MOV R1, A A -> R1 jb302@42: 50 32 00110010 MOV R2, A A -> R2 jb302@42: 51 33 00110011 MOV R3, A A -> R3 jb302@42: 52 34 00110100 MOV DPH, A A -> DPH jb302@42: 53 35 00110101 MOV DPL, A A -> DPL jb302@42: 54 36 00110110 MOV SPH, A A -> SPH jb302@42: 55 37 00110111 MOV SPL, A A -> SPL jb302@42: 56 38 00111000 MOV A, R0 R0 -> A jb302@42: 57 39 00111001 MOV A, R1 R1 -> A jb302@42: 58 3A 00111010 MOV A, R2 R2 -> A jb302@42: 59 3B 00111011 MOV A, R3 R3 -> A jb302@42: 60 3C 00111100 MOV A, DPH DPH -> A jb302@42: 61 3D 00111101 MOV A, DPL DPL -> A jb302@42: 62 3E 00111110 MOV A, SPH SPH -> A jb302@42: 63 3F 00111111 MOV A, SPL SPL -> A jb302@42: 64 40 01000000 MOV R0, @DPTR main[DPTR] -> R0 jb302@42: 65 41 01000001 MOV R0, R1 R1 -> R0 jb302@42: 66 42 01000010 MOV R0, R2 R2 -> R0 jb302@42: 67 43 01000011 MOV R0, R3 R3 -> R0 jb302@42: 68 44 01000100 MOV R0, DPH DPH -> R0 jb302@42: 69 45 01000101 MOV R0, DPL DPL -> R0 jb302@42: 70 46 01000110 MOV R0, SPH SPH -> R0 jb302@42: 71 47 01000111 MOV R0, SPL SPL -> R0 jb302@42: 72 48 01001000 MOV R1, R0 R0 -> R1 jb302@42: 73 49 01001001 MOV R1, @DPTR main[DPTR] -> R1 jb302@42: 74 4A 01001010 MOV R1, R2 R2 -> R1 jb302@42: 75 4B 01001011 MOV R1, R3 R3 -> R1 jb302@42: 76 4C 01001100 MOV R1, DPH DPH -> R1 jb302@42: 77 4D 01001101 MOV R1, DPL DPL -> R1 jb302@42: 78 4E 01001110 MOV R1, SPH SPH -> R1 jb302@42: 79 4F 01001111 MOV R1, SPL SPL -> R1 jb302@42: 80 50 01010000 MOV R2, R0 R0 -> R2 jb302@42: 81 51 01010001 MOV R2, R1 R1 -> R2 jb302@42: 82 52 01010010 MOV R2, @DPTR main[DPTR] -> R2 jb302@42: 83 53 01010011 MOV R2, R3 R3 -> R2 jb302@42: 84 54 01010100 MOV R2, DPH DPH -> R2 jb302@42: 85 55 01010101 MOV R2, DPL DPL -> R2 jb302@42: 86 56 01010110 MOV R2, SPH SPH -> R2 jb302@42: 87 57 01010111 MOV R2, SPL SPL -> R2 jb302@42: 88 58 01011000 MOV R3, R0 R0 -> R3 jb302@42: 89 59 01011001 MOV R3, R1 R1 -> R3 jb302@42: 90 5A 01011010 MOV R3, R2 R2 -> R3 jb302@42: 91 5B 01011011 MOV R3, @DPTR main[DPTR] -> R3 jb302@42: 92 5C 01011100 MOV R3, DPH DPH -> R3 jb302@42: 93 5D 01011101 MOV R3, DPL DPL -> R3 jb302@42: 94 5E 01011110 MOV R3, SPH SPH -> R3 jb302@42: 95 5F 01011111 MOV R3, SPL SPL -> R3 jb302@42: 96 60 01100000 MOV DPH, R0 R0 -> DPH jb302@42: 97 61 01100001 MOV DPH, R1 R1 -> DPH jb302@42: 98 62 01100010 MOV DPH, R2 R2 -> DPH jb302@42: 99 63 01100011 MOV DPH, R3 R3 -> DPH jb302@42: 100 64 01100100 MOV DPH, @DPTR main[DPTR] -> DPH jb302@42: 101 65 01100101 MOV DPH, DPL DPL -> DPH jb302@42: 102 66 01100110 MOV DPH, SPH SPH -> DPH jb302@42: 103 67 01100111 MOV DPH, SPL SPL -> DPH jb302@42: 104 68 01101000 MOV DPL, R0 R0 -> DPL jb302@42: 105 69 01101001 MOV DPL, R1 R1 -> DPL jb302@42: 106 6A 01101010 MOV DPL, R2 R2 -> DPL jb302@42: 107 6B 01101011 MOV DPL, R3 R3 -> DPL jb302@42: 108 6C 01101100 MOV DPL, DPH DPH -> DPL jb302@42: 109 6D 01101101 MOV DPL, @DPTR main[DPTR] -> DPL jb302@42: 110 6E 01101110 MOV DPL, SPH SPH -> DPL jb302@42: 111 6F 01101111 MOV DPL, SPL SPL -> DPL jb302@42: 112 70 01110000 MOV SPH, R0 R0 -> SPH jb302@42: 113 71 01110001 MOV SPH, R1 R1 -> SPH jb302@42: 114 72 01110010 MOV SPH, R2 R2 -> SPH jb302@42: 115 73 01110011 MOV SPH, R3 R3 -> SPH jb302@42: 116 74 01110100 MOV SPH, DPH DPH -> SPH jb302@42: 117 75 01110101 MOV SPH, DPL DPL -> SPH jb302@42: 118 76 01110110 MOV SPH, @DPTR main[DPTR] -> SPH jb302@42: 119 77 01110111 MOV SPH, SPL SPL -> SPH jb302@42: 120 78 01111000 MOV SPL, R0 R0 -> SPL jb302@42: 121 79 01111001 MOV SPL, R1 R1 -> SPL jb302@42: 122 7A 01111010 MOV SPL, R2 R2 -> SPL jb302@42: 123 7B 01111011 MOV SPL, R3 R3 -> SPL jb302@42: 124 7C 01111100 MOV SPL, DPH DPH -> SPL jb302@42: 125 7D 01111101 MOV SPL, DPL DPL -> SPL jb302@42: 126 7E 01111110 MOV SPL, SPH SPH -> SPL jb302@42: 127 7F 01111111 MOV SPL, @DPTR main[DPTR] -> SPL jb302@42: 128 80 10000000 ANL A, R0 A and R0 -> A jb302@42: 129 81 10000001 ANL A, R1 A and R1 -> A jb302@42: 130 82 10000010 ANL A, R2 A and R2 -> A jb302@42: 131 83 10000011 ANL A, R3 A and R3 -> A jb302@42: 132 84 10000100 ANL A, DPH A and DPH -> A jb302@42: 133 85 10000101 ANL A, DPL A and DPL -> A jb302@42: 134 86 10000110 ANL A, #data8 A and data8 -> A jb302@42: 135 87 10000111 ANL A, @DPTR A and main[DPTR] -> A jb302@42: 136 88 10001000 ORL A, R0 A or R0 -> A jb302@42: 137 89 10001001 ORL A, R1 A or R1 -> A jb302@42: 138 8A 10001010 ORL A, R2 A or R2 -> A jb302@42: 139 8B 10001011 ORL A, R3 A or R3 -> A jb302@42: 140 8C 10001100 ORL A, DPH A or DPH -> A jb302@42: 141 8D 10001101 ORL A, DPL A or DPL -> A jb302@42: 142 8E 10001110 ORL A, #data8 A or data8 -> A jb302@42: 143 8F 10001111 ORL A, @DPTR A or main[DPTR] -> A jb302@42: 144 90 10010000 XRL A, R0 A xor R0 -> A jb302@42: 145 91 10010001 XRL A, R1 A xor R1 -> A jb302@42: 146 92 10010010 XRL A, R2 A xor R2 -> A jb302@42: 147 93 10010011 XRL A, R3 A xor R3 -> A jb302@42: 148 94 10010100 XRL A, DPH A xor DPH -> A jb302@42: 149 95 10010101 XRL A, DPL A xor DPL -> A jb302@42: 150 96 10010110 XRL A, #data8 A xor data8 -> A jb302@42: 151 97 10010111 XRL A, @DPTR A xor main[DPTR] -> A jb302@42: 152 98 10011000 RL A rotate accumulator left jb302@42: 153 99 10011001 RLC A rotate accumulator left through carry jb302@42: 154 9A 10011010 RR A rotate accumulator right jb302@42: 155 9B 10011011 RRC A rotate accumulator right through carry jb302@42: 156 9C 10011100 INC DPTR DPTR + 1 -> DPTR Increment DPTR jb302@42: 157 9D 10011101 DEC DPTR DPTR -1 -> DPTR Decrement DPTR jb302@42: 158 9E 10011110 INC A A + 1 -> A Increment accumulator jb302@42: 159 9F 10011111 DEC A A - 1 -> A Decrement accumulator jb302@42: 160 A0 10100000 ADD A, R0 A + R0 -> A jb302@42: 161 A1 10100001 ADD A, R1 A + R1 -> A jb302@42: 162 A2 10100010 ADD A, R2 A + R2 -> A jb302@42: 163 A3 10100011 ADD A, R3 A + R3 -> A jb302@42: 164 A4 10100100 ADD A, DPH A + DPH -> A jb302@42: 165 A5 10100101 ADD A, DPL A + DPL -> A jb302@42: 166 A6 10100110 ADD A, #data8 A + data8 -> A jb302@42: 167 A7 10100111 ADD A, @DPTR A + main[DPTR] -> A jb302@42: 168 A8 10101000 ADDC A, R0 A + R0 + CY -> A jb302@42: 169 A9 10101001 ADDC A, R1 A + R1 + CY -> A jb302@42: 170 AA 10101010 ADDC A, R2 A + R2 + CY -> A jb302@42: 171 AB 10101011 ADDC A, R3 A + R3 + CY -> A jb302@42: 172 AC 10101100 ADDC A, DPH A + DPH + CY -> A jb302@42: 173 AD 10101101 ADDC A, DPL A + DPL + CY -> A jb302@42: 174 AE 10101110 ADDC A, #data8 A + data8 + CY -> A jb302@42: 175 AF 10101111 ADDC A, @DPTR A + main[DPTR] + CY -> A jb302@42: 176 B0 10110000 SUB A, R0 A - R0 -> A jb302@42: 177 B1 10110001 SUB A, R1 A - R1 -> A jb302@42: 178 B2 10110010 SUB A, R2 A - R2 -> A jb302@42: 179 B3 10110011 SUB A, R3 A - R3 -> A jb302@42: 180 B4 10110100 SUB A, DPH A - DPH -> A jb302@42: 181 B5 10110101 SUB A, DPL A - DPL -> A jb302@42: 182 B6 10110110 SUB A, #data8 A - data8 -> A jb302@42: 183 B7 10110111 SUB A, @DPTR A - main[DPTR] -> A jb302@42: 184 B8 10111000 SUBB A, R0 A - R0 - CY -> A jb302@42: 185 B9 10111001 SUBB A, R1 A - R1 - CY -> A jb302@42: 186 BA 10111010 SUBB A, R2 A - R2 - CY -> A jb302@42: 187 BB 10111011 SUBB A, R3 A - R3 - CY -> A jb302@42: 188 BC 10111100 SUBB A, DPH A - DPH - CY -> A jb302@42: 189 BD 10111101 SUBB A, DPL A - DPL - CY -> A jb302@42: 190 BE 10111110 SUBB A, #data8 A - data8 - CY -> A jb302@42: 191 BF 10111111 SUBB A, @DPTR A - main[DPTR] - CY -> A jb302@42: 192 C0 11000000 PJMP addr11 Page Jump [PC(15:11) 0 0 0 addr8] jb302@42: 193 C1 11000001 PJMP addr11 Page Jump [PC(15:11) 0 0 1 addr8] jb302@42: 194 C2 11000010 PJMP addr11 Page Jump [PC(15:11) 0 1 0 addr8] jb302@42: 195 C3 11000011 PJMP addr11 Page Jump [PC(15:11) 0 1 1 addr8] jb302@42: 196 C4 11000100 PJMP addr11 Page Jump [PC(15:11) 1 0 0 addr8] jb302@42: 197 C5 11000101 PJMP addr11 Page Jump [PC(15:11) 1 0 1 addr8] jb302@42: 198 C6 11000110 PJMP addr11 Page Jump [PC(15:11) 1 1 0 addr8] jb302@42: 199 C7 11000111 PJMP addr11 Page Jump [PC(15:11) 1 1 1 addr8] jb302@42: 200 C8 11001000 PCALL addr11 Page Call [PC(15:11) 0 0 0 addr8] jb302@42: 201 C9 11001001 PCALL addr11 Page Call [PC(15:11) 0 0 1 addr8] jb302@42: 202 CA 11001010 PCALL addr11 Page Call [PC(15:11) 0 1 0 addr8] jb302@42: 203 CB 11001011 PCALL addr11 Page Call [PC(15:11) 0 1 1 addr8] jb302@42: 204 CC 11001100 PCALL addr11 Page Call [PC(15:11) 1 0 0 addr8] jb302@42: 205 CD 11001101 PCALL addr11 Page Call [PC(15:11) 1 0 1 addr8] jb302@42: 206 CE 11001110 PCALL addr11 Page Call [PC(15:11) 1 1 0 addr8] jb302@42: 207 CF 11001111 PCALL addr11 Page Call [PC(15:11) 1 1 1 addr8] jb302@42: 208 D0 11010000 DJNZ R0, rel8 Decrement R0 and jump if not zero jb302@42: 209 D1 11010001 DJNZ R1, rel8 Decrement R1 and jump if not zero jb302@42: 210 D2 11010010 DJNZ R2, rel8 Decrement R2 and jump if not zero jb302@42: 211 D3 11010011 DJNZ R3, rel8 Decrement R3 and jump if not zero jb302@42: 212 D4 11010100 CJNE R0, #data, rel8 Compare R0 with data8 and jump if not equal jb302@42: 213 D5 11010101 CJNE R1, #data, rel8 Compare R1 with data8 and jump if not equal jb302@42: 214 D6 11010110 CJNE R2, #data, rel8 Compare R2 with data8 and jump if not equal jb302@42: 215 D7 11010111 CJNE R3, #data, rel8 Compare R3 with data8 and jump if not equal jb302@42: 216 D8 11011000 LJMP addr16 Long jump to addr16 jb302@42: 217 D9 11011001 LCALL addr16 Long call to subroutine at addr16 jb302@42: 218 DA 11011010 RET return from subroutine jb302@42: 219 DB 11011011 RETI return from interrupt jb302@42: 220 DC 11011100 SJMP rel8 short (relative) jump jb302@42: 221 DD 11011101 JMP @A+DPTR Indexed indirect jump relative to DPTR jb302@42: 222 DE 11011110 JMP @DPTR jump indirect to DPTR jb302@42: 223 DF 11011111 CJNE A, #data8, rel8 Compare A with data8 and jump if not equal jb302@42: 224 E0 11100000 JZ rel8 Jump if zero jb302@42: 225 E1 11100001 JNZ rel8 Jump if not zero jb302@42: 226 E2 11100010 JC rel8 Jump if carry jb302@42: 227 E3 11100011 JNC rel8 Jump if not carry jb302@42: 228 E4 11100100 JPO rel8 Jump if parity odd jb302@42: 229 E5 11100101 JPE rel8 Jump if parity even jb302@42: 230 E6 11100110 JS rel8 Jump if sign (negative) jb302@42: 231 E7 11100111 JNS rel8 Jump if not sign (positive) jb302@42: 232 E8 11101000 PUSH R0 Push R0 to the stack jb302@42: 233 E9 11101001 PUSH R1 Push R1 to the stack jb302@42: 234 EA 11101010 PUSH R2 Push R2 to the stack jb302@42: 235 EB 11101011 PUSH R3 Push R3 to the stack jb302@42: 236 EC 11101100 PUSH DPH Push DPH to the stack jb302@42: 237 ED 11101101 PUSH DPL Push DPL to the stack jb302@42: 238 EE 11101110 PUSH A Push Accumulator to the stack jb302@42: 239 EF 11101111 PUSH FLAGS Push Flags register to the stack jb302@42: 240 F0 11110000 POP R0 Pop top off stack to R0 jb302@42: 241 F1 11110001 POP R1 Pop top off stack to R1 jb302@42: 242 F2 11110010 POP R2 Pop top off stack to R2 jb302@42: 243 F3 11110011 POP R3 Pop top off stack to R3 jb302@42: 244 F4 11110100 POP DPH Pop top off stack to DPH jb302@42: 245 F5 11110101 POP DPL Pop top off stack to DPL jb302@42: 246 F6 11110110 POP A Pop top off stack to Accumulator jb302@42: 247 F7 11110111 POP FLAGS Pop top off stack to Flags register jb302@42: 248 F8 11111000 MUL R0, R1 R0 * R1 -> {R0 R1} unsigned integer multiply R0 by R1, 16-bit result left in R0 and R1, R0 holds most significant byte jb302@42: 249 F9 11111001 DIV R0, R1 R0 / R1 -> {R0 R1} unsigned integer division R0 by R1, 16-bit result left in R0 and R1, R0 holds most significant byte jb302@42: 250 FA 11111010 DA A Decimal adjust accumulator jb302@42: 251 FB 11111011 reserved currently unallocated opcode - treat as NOP jb302@42: 252 FC 11111100 IN A, port_addr Input value on I/O port 'port_addr' to accumulator jb302@42: 253 FD 11111101 OUT port_addr, A Output accumulator value to I/O port 'port_addr' jb302@42: 254 FE 11111110 INT vect8 Software interrupt at vector vect8 jb302@42: 255 FF 11111111 HLT Halt processor