Last active
August 29, 2015 14:14
-
-
Save vivekannan/6f87cfaa27a2d2a2dba0 to your computer and use it in GitHub Desktop.
A 8051 assembly program that can execute the 8085 instruction set from external memory.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;Little Endian --> Lower bytes in lower address and higher bytes in higher address. | |
EQU LOOKUP #0FEH | |
EQU ACC 0E0H | |
EQU EPCL 14H | |
EQU EPCH 15H | |
EQU ESPL 16H | |
EQU ESPH 17H | |
EQU EL 18H | |
EQU EH 19H | |
EQU EE 1AH | |
EQU ED 1BH | |
EQU EC 1CH | |
EQU EB 1DH | |
EQU EF 1EH | |
EQU EACC 1FH | |
EQU EPSW 20H | |
EQU EBCY 00H | |
EQU EBP 02H | |
EQU EBAC 04H | |
EQU EBZ 06H | |
EQU EBS 07H | |
;The DPTR register serves both as the Program Counter (PC) for the external memory | |
;as well as the internal lookup table register. Because of this, the contents of DPTR | |
;are frequently stored in the internal RAM locations 06 & 07 while the DPTR is used for | |
;internal lookup table referencing. | |
; | |
;The DPTR is initialised with the value FFFF and incremented to start the execution of the hexcodes | |
;in the external memory sequentially. The MOVX instruction is used to fetch the hexcodes | |
;from the external memory to the accumulator A and use it as a key for the lookup table address. | |
;The lookup table contains hexcodes which are the addresses where the subroutine relating | |
;to current opcode is written. | |
; | |
;Once the address is fetched from the lookup table, it is pushed into the stack and a rogue | |
;RET instruction is executed to perform an illegal jump to the address at the top of the stack. | |
;The contents of DPTR are relinquished from the internal RAM locations 06 & 07 before the jump | |
;so that the program can continue to read hexcodes from the external memory. | |
; | |
;Order of execution: | |
; | |
; > Read Hexcode from EXMEM. | |
; > Find subroutine address from lookup table using the hexcode as a key. | |
; > Jump to the address and execute the subroutine to perform the necessary actions. | |
; > Use DPTR to read data from the EXMEM if necessary for the current opcode. | |
; > Repeat the steps by illegally jumping out of the subroutine again. | |
;Start reading hexcodes from EXMEM. | |
MOV DPTR, #0FFFFH; | |
;Label where the looping starts. DPTR is incremented to point to the next hexcode. | |
PROGRESS: | |
INC DPTR; | |
;Move hexcode into the accumulator from EXMEM. This is done sequentially until the | |
;end of the EXMEM is reached. Once reached, the process os started again. | |
MOVX A, @DPTR; | |
;Preserve the contents of DPTR into the internal RAM before using it for lookup | |
;table referencing. | |
LCALL SAVEDPTR | |
;Move the constant lookup higher byte into DPH and thw lower byte to DPL and clear | |
;the accumulator as it will be added to DPTR during the MOVC instruction. | |
MOV DPH, LOOKUP; | |
MOV DPL, A; | |
CLR A; | |
;Perfrom MOVC once to get lower byte of the jump address and push it into stack | |
MOVC A, @A+DPTR | |
PUSH ACC | |
;Increment DPH to point to the next lookup table with the same lower byte. | |
INC DPH | |
CLR A; | |
;Fetch the higher address from the lookup table now and push it to stack. | |
MOVC A, @A+DPTR | |
PUSH ACC; | |
;Restore the contents of DPTR to point to the EXMEM. | |
LCALL RESTOREDPTR | |
;Rogue RET to jump to subroutine to perform instructions related to the current | |
;opcode. Since the DPTR points to the EXMEM, it can be used to read data from the | |
;EXMEM necessary for the current opcode in the subroutine. | |
RET | |
SAVEDPTR: MOV EPCH, DPH | |
MOV EPCL, DPL | |
RET | |
RESTOREDPTR: MOV DPH, EPCH | |
MOV DPL, EPCL | |
RET | |
;Instruction: NOP | |
;Opcode: 00 | |
;Description: Do nothing. | |
LJMP PROGRESS | |
;Instruction: LXI B, data16 | |
;Opcode: 01 | |
;Description: Move 16 bit data in B register pair (BC). | |
;Increment DPTR to point to MSB of data16 and move it into the internal | |
;accumulator with MOVX. | |
INC DPTR; | |
MOVX A, @DPTR; | |
;Move MSB of data16 in accumulator into EB; | |
MOV EB, A; | |
;Get LSB of data16 from EXMEM and move it into A. | |
INC DPTR; | |
MOVX A, @DPTR; | |
;Move LSB of data16 in accumulator into EC; | |
MOV EC, A; | |
LJMP PROGRESS; | |
;Instruction: STAX B | |
;Opcode: 02 | |
;Description: Contents of accumulator are moved into the memory location pointed | |
;by the B register pair (BC). | |
;Save value of DPTR in internal memory. | |
LCALL SAVEDPTR | |
;Move content in B register pair (BC) in DPTR to point to EXMEM. | |
MOV DPH, EB; | |
MOV DPL, EC; | |
;Move contents of EACC into A to move to EXMEM | |
MOV A, EACC; | |
MOVX @DPTR, A | |
;Restore DPTR to point to end of instruction. | |
LCALL RESTOREDPTR | |
LJMP PROGRESS | |
;Instruction: INX B | |
;Opcode: 03 | |
;Description: Increment the content of the register pair B. | |
;Clear carry flag to prevent confusion. | |
CLR C | |
;Move EC to A and increment value by adding one. This is to ensure that the carry | |
;flag is set in case of overflow. Move A to EC. | |
MOV A, EC | |
ADD A, #01; | |
MOV EC, A | |
;Jump out of instruction if carry is not set, else increment B. | |
JNC DONE03 | |
INC EB | |
DONE03: LJMP PROGRESS | |
;Instruction: INR B | |
;Opcode: 04 | |
;Description: Increments the content of B register. Affects flags. | |
;Clear carry bit to avoid confusion. | |
CLR C | |
;Move EB to A and add one to increment with carry notification. | |
MOV A, EB | |
ADD A, #01; | |
MOV EB, A | |
;Check for carry flag and set bits as needed. | |
JNC DONE04 | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
DONE04: LJMP PROGRESS | |
;Instruction: DCR B | |
;Opcode: 05 | |
;Description: Decrements the content of B register. Affects flags. | |
;Move EB to A and check if zero. | |
MOV A, EB | |
JNZ DONE05 | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
DONE05: DEC EB | |
LJMP PROGRESS | |
;Instruction: MVI B, data8 | |
;Opcode: 06 | |
;Description: Given data8 is stored in the register B. | |
;Increment DPTR to point to data8. | |
INC DPTR | |
;Move data8 into A and then into EB. | |
MOVX A, @DPTR | |
MOV EB, A | |
LJMP PROGRESS | |
;Instruction: RLC | |
;Opcode: 07 | |
;Description: Left rotate EACC once and make EBCY == D7 of EACC | |
;Clear carry to avoid confusion. | |
CLR C | |
;Move EACC into A and rotate left using RLC. Carry bit now contains D7. | |
MOV A, EACC | |
RLC A | |
;If carry is not set, D7 is zero. Hence jump. | |
JNC DONE07 | |
;Else, set D0 to match with D7 as per the instruction. | |
SETB A.0 | |
;;;;; Write code to set flags as per the instruction. ;;;;; | |
;Move A into EACC. | |
DONE07: MOV EACC, A | |
LJMP PROGRESS | |
;Instruction: DSUB | |
;Opcode: 08 | |
;Description: Undocumented. | |
LJMP PROGRESS | |
;Instruction: DAD B | |
;Opcode: 09 | |
;Description: Contents of register pair B are added with register pair | |
;H and the EBCY is set if result is larger than 16-bits. | |
;Clear carry to avoid confusion. | |
CLR C; | |
;Move the LSB of register H to A and LSB of B pair with it and move it back to | |
;EL. | |
MOV A, EL | |
ADD A, EC | |
MOV EL, A | |
;Move the H pairs's MSB into A and add MSB of B pair to it with the previous carry. | |
MOV A, EH | |
ADDC A, EB | |
MOV EH, A | |
JNC DONE09 | |
;Set EBCY if CY is set. | |
SETB EBCY | |
DONE09: LJMP PROGRESS | |
;Instruction: LDAX B | |
;Opcode: 0A | |
;Description: Contents of the memory location pointed by the B register pair (BC) | |
;is moved into EACC. | |
;Save value of DPTR in internal memory. | |
LCALL SAVEDPTR | |
;Move content in B register pair (BC) in DPTR to point to EXMEM. | |
MOV DPH, EB; | |
MOV DPL, EC; | |
;Move contents EXMEM pointed by DPTR to A and then to EACC. | |
MOVX A, @DPTR | |
MOV EACC, A; | |
;Restore DPTR to point to end of instruction. | |
LCALL RESTOREDPTR | |
LJMP PROGRESS | |
;Instruction: DCX B | |
;Opcode: 0B | |
;Description: Decrements the content of the register pair B. | |
;Move EC to A check if zero. Decrement EB if true. | |
MOV A, EC | |
JNZ DONE0B; | |
DEC EB; | |
DONE0B: DEC EC; | |
LJMP PROGRESS | |
;Instruction: INR C | |
;Opcode: 0C | |
;Description: Increments the content of register C. | |
;Clear carry bit to avoid confusion. | |
CLR C | |
;Move EC to A and add one to increment with carry notification. | |
MOV A, EC | |
ADD A, #01; | |
MOV EC, A | |
;Check for carry flag and set bits as needed. | |
JNC DONE0C | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
DONE0C: LJMP PROGRESS | |
;Instruction: DCR C | |
;Opcode: 0D | |
;Description: Decrements the content of register C. | |
;Clear carry bit to avoid confusion. | |
CLR C | |
;Move EC to A and add FF to decrement with carry notification. | |
MOV A, EC | |
ADD A, #0FFH; | |
MOV EC, A | |
;Check for carry flag and set bits as needed. | |
JNC DONE0D | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
DONE0D: LJMP PROGRESS | |
;Instruction: MVI C, data8 | |
;Opcode: 0E | |
;Description: Given data8 is stored in the register C. | |
;Increment DPTR to point to data8. | |
INC DPTR | |
;Move data8 into A and then into EC. | |
MOVX A, @DPTR | |
MOV EC, A | |
LJMP PROGRESS | |
;Instruction: RRC | |
;Opcode: 0F | |
;Description: Right rotate EACC once and make EBCY == D7 of EACC | |
;Clear carry to avoid confusion. | |
CLR C | |
;Move EACC into A and rotate left using RLC. Carry bit now contains D7. | |
MOV A, EACC | |
RRC A | |
;If carry is not set, D7 is zero. Hence jump. | |
JNC DONE0F | |
;Else, set D0 to match with D7 as per the instruction. | |
SETB A.7 | |
;;;;; Write code to set flags as per the instruction. ;;;;; | |
;Move A into EACC. | |
DONE0F: MOV EACC, A | |
LJMP PROGRESS | |
;Instruction: ARHL | |
;Opcode: 10 | |
;Description: Undocumented. | |
LJMP PROGRESS | |
;Instruction: LXI D, data16 | |
;Opcode: 11 | |
;Description: Move 16 bit data in D register pair (DE). | |
;Increment DPTR to point to MSB of data16 and move it into the internal | |
;accumulator with MOVX. | |
INC DPTR; | |
MOVX A, @DPTR; | |
;Move MSB of data16 in accumulator into ED; | |
MOV ED, A; | |
;Get LSB of data16 from EXMEM and move it into A. | |
INC DPTR; | |
MOVX A, @DPTR; | |
;Move LSB of data16 in accumulator into EE; | |
MOV EE, A; | |
LJMP PROGRESS; | |
;Instruction: STAX D | |
;Opcode: 12 | |
;Description: Contents of accumulator are moved into the memory location pointed | |
;by the D register pair (DE). | |
;Save value of DPTR in internal memory. | |
LCALL SAVEDPTR | |
;Move content in B register pair (BC) in DPTR to point to EXMEM. | |
MOV DPH, ED; | |
MOV DPL, EE; | |
;Move contents of EACC into A to move to EXMEM | |
MOV A, EACC; | |
MOVX @DPTR, A | |
;Restore DPTR to point to end of instruction. | |
LCALL RESTOREDPTR | |
LJMP PROGRESS | |
;Instruction: INX D | |
;Opcode: 13 | |
;Description: Increment the content of the register pair D. | |
;Clear carry flag to prevent confusion. | |
CLR C | |
;Move EE to A and increment value by adding one. This is to ensure that the carry | |
;flag is set in case of overflow. Move A to EE. | |
MOV A, EE | |
ADD A, #01; | |
MOV EE, A | |
;Jump out of instruction if carry is not set, else increment ED. | |
JNC DONE13 | |
INC ED | |
DONE13: LJMP PROGRESS | |
;Instruction: INR D | |
;Opcode: 14 | |
;Description: Increments the content of D register. Affects flags. | |
;Clear carry bit to avoid confusion. | |
CLR C | |
;Move ED to A and add one to increment with carry notification. | |
MOV A, ED | |
ADD A, #01; | |
MOV ED, A | |
;Check for carry flag and set bits as needed. | |
JNC DONE14 | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
DONE14: LJMP PROGRESS | |
;Instruction: DCR D | |
;Opcode: 15 | |
;Description: Decrements the content of D register. Affects flags. | |
;Move ED to A and check if zero. | |
MOV A, ED | |
JNZ DONE15 | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
DONE15: DEC ED | |
LJMP PROGRESS | |
;Instruction: MVI D, data8 | |
;Opcode: 16 | |
;Description: Given data8 is stored in the register D. | |
;Increment DPTR to point to data8. | |
INC DPTR | |
;Move data8 into A and then into ED. | |
MOVX A, @DPTR | |
MOV ED, A | |
LJMP PROGRESS | |
;Instruction: RAL | |
;Opcode: 17 | |
;Description: Left rotate EACC once through EBCY. | |
;Clear carry to avoid confusion. | |
CLR C | |
;Move EACC into A and rotate left using RLC. Carry bit now contains D7. | |
MOV A, EACC | |
RLC A | |
;Set A.0 if EBCY is set else move on with CY. | |
JNB EBCY, CHECKCY | |
SETB A.0 | |
;Pre-emptively clear EBCY and see if CY is set. Set EBCY if so. | |
CHECKCY: CLR EBCY | |
JNC DONE17 | |
SETB EBCY | |
DONE17: MOV EACC, A | |
LJMP PROGRESS | |
;Instruction: RDEL | |
;Opcode: 18 | |
;Description: Undocumented. | |
LJMP PROGRESS | |
;Instruction: DAD D | |
;Opcode: 19 | |
;Description: Contents of register pair D are added with register pair | |
;H and the EBCY is set if result is larger than 16-bits. | |
;Clear carry to avoid confusion. | |
CLR C; | |
;Move the LSB of register H to A and LSB of D pair with it and move it back to | |
;EL. | |
MOV A, EL | |
ADD A, EE | |
MOV EL, A | |
;Move the H pairs's MSB into A and add MSB of D pair to it with the previous carry. | |
MOV A, EH | |
ADDC A, ED | |
MOV EH, A | |
JNC DONE19 | |
;Set EBCY if CY is set. | |
SETB EBCY | |
DONE19: LJMP PROGRESS | |
;Instruction: LDAX D | |
;Opcode: 1A | |
;Description: Contents of the memory location pointed by the D register pair (DE) | |
;is moved into EACC. | |
;Save value of DPTR in internal memory. | |
LCALL SAVEDPTR | |
;Move content in D register pair (DE) in DPTR to point to EXMEM. | |
MOV DPH, ED; | |
MOV DPL, EE; | |
;Move contents EXMEM pointed by DPTR to A and then to EACC. | |
MOVX A, @DPTR | |
MOV EACC, A; | |
;Restore DPTR to point to end of instruction. | |
LCALL RESTOREDPTR | |
LJMP PROGRESS | |
;Instruction: DCX D | |
;Opcode: 1B | |
;Description: Decrements the content of the register pair D. | |
;Move EE to A check if zero. Decrement ED if true. | |
MOV A, EE | |
JNZ DONE1B; | |
DEC ED; | |
DONE1B: DEC EE; | |
LJMP PROGRESS | |
;Instruction: INR E | |
;Opcode: 1C | |
;Description: Increments the content of register E. | |
;Clear carry bit to avoid confusion. | |
CLR C | |
;Move EE to A and add one to increment with carry notification. | |
MOV A, EE | |
ADD A, #01; | |
MOV EE, A | |
;Check for carry flag and set bits as needed. | |
JNC DONE1C | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
DONE1C: LJMP PROGRESS | |
;Instruction: DCR E | |
;Opcode: 1D | |
;Description: Decrements the content of register E. | |
;Clear carry bit to avoid confusion. | |
CLR C | |
;Move EE to A and add FF to decrement with carry notification. | |
MOV A, EE | |
ADD A, #0FFH; | |
MOV EE, A | |
;Check for carry flag and set bits as needed. | |
JNC DONE1D | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
DONE1D: LJMP PROGRESS | |
;Instruction: MVI E, data8 | |
;Opcode: 1E | |
;Description: Given data8 is stored in the register E. | |
;Increment DPTR to point to data8. | |
INC DPTR | |
;Move data8 into A and then into EE. | |
MOVX A, @DPTR | |
MOV EE, A | |
LJMP PROGRESS | |
;Instruction: RAR | |
;Opcode: 1F | |
;Description: Right rotate EACC once through EBCY. | |
;Clear carry to avoid confusion. | |
CLR C | |
;Move EACC into A and rotate left using RLC. Carry bit now contains D7. | |
MOV A, EACC | |
RLC A | |
;Set A.0 if EBCY is set else move on with CY. | |
JNB EBCY, CHECKCY | |
SETB A.7 | |
;Pre-emptively clear EBCY and see if CY is set. Set EBCY if so. | |
CHECKCY: CLR EBCY | |
JNC DONE17 | |
SETB EBCY | |
DONE17: MOV EACC, A | |
LJMP PROGRESS | |
;Instruction: RIM | |
;Opcode: 20 | |
;Description: ??? | |
LJMP PROGRESS | |
;Instruction: LXI H, data16 | |
;Opcode: 21 | |
;Description: Move 16 bit data in H register pair (HL). | |
;Increment DPTR to point to MSB of data16 and move it into the internal | |
;accumulator with MOVX. | |
INC DPTR; | |
MOVX A, @DPTR; | |
;Move MSB of data16 in accumulator into EH; | |
MOV EH, A; | |
;Get LSB of data16 from EXMEM and move it into A. | |
INC DPTR; | |
MOVX A, @DPTR; | |
;Move LSB of data16 in accumulator into EL; | |
MOV EL, A; | |
LJMP PROGRESS; | |
;Instruction: SHLD address16 | |
;Opcode: 22 | |
;Description: Contents of the register L are stored in the given address and the | |
;contents of the register H are stored in the next address. | |
;Increment DPTR to point to MSB of address16. Move MSB of address16 to A | |
;and then PUSH it into the stack. | |
INC DPTR | |
MOVX A, @DPTR | |
PUSH ACC | |
;Increment DPTR and get LSB into A and PUSH again. | |
INC DPTR | |
MOVX A, @DPTR | |
PUSH ACC | |
;Save the value of DPTR | |
LCALL SAVEDPTR | |
;POP address16 into DPTR. | |
POP DPL | |
POP DPH | |
;Move register L to A and transfer it to EXMEM using DPTR. | |
MOV A, EL | |
MOVX @DPTR, A | |
;Increment DPTR to point to next EXMEM location and move the register H. | |
;using MOVX. | |
INC DPTR | |
MOV A, EH | |
MOVX @DPTR, A | |
;Restore content of DPTR. | |
LCALL RESTOREDPTR | |
LJMP PROGRESS | |
;Instruction: INX H | |
;Opcode: 23 | |
;Description: Increment the content of the register pair H. | |
;Clear carry flag to prevent confusion. | |
CLR C | |
;Move EL to A and increment value by adding one. This is to ensure that the carry | |
;flag is set in case of overflow. Move A to EL. | |
MOV A, EL | |
ADD A, #01; | |
MOV EL, A | |
;Jump out of instruction if carry is not set, else increment EH. | |
JNC DONE23 | |
INC EH | |
DONE23: LJMP PROGRESS | |
;Instruction: INR H | |
;Opcode: 24 | |
;Description: Increments the content of H register. Affects flags. | |
;Clear carry bit to avoid confusion. | |
CLR C | |
;Move EH to A and add one to increment with carry notification. | |
MOV A, EH | |
ADD A, #01; | |
MOV EH, A | |
;Check for carry flag and set bits as needed. | |
JNC DONE24 | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
DONE24: LJMP PROGRESS | |
;Instruction: DCR H | |
;Opcode: 25 | |
;Description: Decrements the content of H register. Affects flags. | |
;Move EH to A and check if zero. | |
MOV A, EH | |
JNZ DONE25 | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
DONE25: DEC EH | |
LJMP PROGRESS | |
;Instruction: MVI H, data8 | |
;Opcode: 26 | |
;Description: Given data8 is stored in the register H. | |
;Increment DPTR to point to data8. | |
INC DPTR | |
;Move data8 into A and then into EH. | |
MOVX A, @DPTR | |
MOV EH, A | |
LJMP PROGRESS | |
;Instruction: DAA | |
;Opcode: 27 | |
;Description: The content of EACC are converted to two 4-bit BCD. | |
;Move EACC to A and perform DA instruction and move it back in. | |
MOV A, EACC | |
DA A | |
MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: LDHI data8 | |
;Opcode: 28 | |
;Description: Undocumented. | |
LJMP PROGRESS | |
;Instruction: DAD H | |
;Opcode: 29 | |
;Description: Contents of register pair H are added with register pair | |
;H and the EBCY is set if result is larger than 16-bits. | |
;Clear carry to avoid confusion. | |
CLR C; | |
;Move the LSB of register H to A and LSB of H pair with it and move it back to | |
;EL. | |
MOV A, EL | |
ADD A, EL | |
MOV EL, A | |
;Move the H pairs's MSB into A and add MSB of H pair to it with the previous carry. | |
MOV A, EH | |
ADDC A, EH | |
MOV EH, A | |
JNC DONE29 | |
;Set EBCY if CY is set. | |
SETB EBCY | |
DONE29: LJMP PROGRESS | |
;Instruction: LHLD address16 | |
;Opcode: 2A | |
;Description: The contents of the given memory location is stored in register L | |
;and the contents of the next memory location is stored in register H. | |
;Increment DPTR to point to MSB of address16 and get it into A. | |
INC DPTR | |
MOVX A, @DPTR | |
;Push A into the stack and repeat to get LSB of address16. | |
PUSH ACC | |
INC DPTR | |
MOVX A, @DPTR | |
PUSH ACC | |
;Save contents of DPTR. | |
LCALL SAVEDPTR | |
;Use address16 from stack and transfer contents of location in register EL. | |
POP DPL | |
POP DPH | |
MOVX A, @DPTR | |
MOV EL, A | |
;Increment DPTR to get next data and move it into EH. | |
INC DPTR | |
MOVX A, @DPTR | |
MOV EH, A | |
;Restore the contents of DPTR> | |
LCALL RESTOREDPTR | |
LJMP PROGRESS | |
;Instruction: DCX H | |
;Opcode: 2B | |
;Description: Decrements the content of the register pair H. | |
;Move EL to A check if zero. Decrement ED if true. | |
MOV A, EL | |
JNZ DONE2B; | |
DEC EH; | |
DONE2B: DEC EL; | |
LJMP PROGRESS | |
;Instruction: INR L | |
;Opcode: 2C | |
;Description: Increments the content of register L. | |
;Clear carry bit to avoid confusion. | |
CLR C | |
;Move EL to A and add one to increment with carry notification. | |
MOV A, EL | |
ADD A, #01; | |
MOV EL, A | |
;Check for carry flag and set bits as needed. | |
JNC DONE2C | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
DONE2C: LJMP PROGRESS | |
;Instruction: DCR L | |
;Opcode: 2D | |
;Description: Decrements the content of register L. | |
;Clear carry bit to avoid confusion. | |
CLR C | |
;Move EL to A and add FF to decrement with carry notification. | |
MOV A, EL | |
ADD A, #0FFH; | |
MOV EL, A | |
;Check for carry flag and set bits as needed. | |
JNC DONE2D | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
DONE2D: LJMP PROGRESS | |
;Instruction: MVI L, data8 | |
;Opcode: 2E | |
;Description: Given data8 is stored in the register L. | |
;Increment DPTR to point to data8. | |
INC DPTR | |
;Move data8 into A and then into EL. | |
MOVX A, @DPTR | |
MOV EL, A | |
LJMP PROGRESS | |
;Instruction: CMA | |
;Opcode: 2F | |
;Description: Contents of EACC are complemented. | |
;Move EACC to A and then complement A and move it back to EACC. | |
MOV A, EACC | |
CPL A | |
MOV EACC, A | |
LJMP PROGRESS | |
;Instruction: SIM | |
;Opcode: 30 | |
;Description: ??? | |
LJMP PROGRESS | |
;Instruction: LXI SP, data16 | |
;Opcode: 31 | |
;Description: Move 16 bit data into the ESP. | |
;Increment DPTR to point to MSB of data16 and move it into the internal | |
;accumulator with MOVX. | |
INC DPTR; | |
MOVX A, @DPTR; | |
;Move MSB of data16 in accumulator into ESPH; | |
MOV ESPH, A; | |
;Get LSB of data16 from EXMEM and move it into A. | |
INC DPTR; | |
MOVX A, @DPTR; | |
;Move LSB of data16 in accumulator into ESPL; | |
MOV ESPL, A; | |
LJMP PROGRESS; | |
;Instruction: STA address16 | |
;Opcode: 32 | |
;Description: The contents of EACC are stored in the location specified by address16. | |
;Get the MSB and LSB of address16 and push them into the stack. | |
INC DPTR | |
MOVX A, @DPTR | |
PUSH ACC | |
INC DPTR | |
MOVX A, @DPTR | |
PUSH ACC | |
;Save contents of DPTR. | |
LCALL SAVEDPTR | |
;Pop address16 into DPTR and move EACC into address16 location. | |
POP DPL | |
POP DPH | |
MOV A, EACC | |
MOVX @DPTR, A | |
;Restore value of DPTR | |
LCALL RESTOREDPTR | |
LJMP PROGRESS | |
;Instruction: INX SP | |
;Opcode: 33 | |
;Description: Increment the content of ESP. | |
;Clear carry flag to prevent confusion. | |
CLR C | |
;Move EL to A and increment value by adding one. This is to ensure that the carry | |
;flag is set in case of overflow. Move A to EL. | |
MOV A, ESPL | |
ADD A, #01; | |
MOV ESPL, A | |
;Jump out of instruction if carry is not set, else increment ESPH. | |
JNC DONE33 | |
INC ESPH | |
DONE33: LJMP PROGRESS | |
;Instruction: INR M | |
;Opcode: 34 | |
;Description: Increments the content of the memory location pointed by register | |
;pair H (HL). Flags are affected. | |
;Clear carry bit to avoid confusion. | |
CLR C | |
;Save contents of DPTR. | |
LCALL SAVEDPTR | |
;Move contents of register H into DPTR and use the value as and address16 to | |
;access content to be incremented. | |
MOV DPH, EH | |
MOV DPL, EL | |
MOVX A, @DPTR | |
ADD A, #01; | |
MOVX @DPTR, A | |
;Restore contents of DPTR | |
LCALL RESTOREDPTR | |
;Check for carry flag and set bits as needed. | |
JNC DONE34 | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
DONE34: LJMP PROGRESS | |
;Instruction: DCR M | |
;Opcode: 35 | |
;Description: Decrements the content of the memory location pointed by register | |
;pair H (HL). Flags are affected. | |
;Save contents of DPTR. | |
LCALL SAVEDPTR | |
;Move contents of register H into DPTR and use the value as and address16 to | |
;access content to be incremented. | |
MOV DPH, EH | |
MOV DPL, EL | |
MOVX A, @DPTR | |
;Check if A in zero and jump accordingly. | |
JNZ DONE35 | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
DONE35: DEC A | |
MOVX @DPTR, A | |
;Restore contents of DPTR | |
LCALL RESTOREDPTR | |
LJMP PROGRESS | |
;Instruction: MVI M, data8 | |
;Opcode: 36 | |
;Description: Given data8 is stored in the memory location pointed by the | |
;register pair H (HL). | |
;Increment DPTR to point to data8. | |
INC DPTR | |
;Move data8 into A and then into EH. | |
MOVX A, @DPTR | |
;Save DPTR | |
LCALL SAVEDPTR | |
;Move content of register pair H into DPTR | |
MOV DPH, EH | |
MOV DPL, EL | |
;Move contents of A into memory pointed by DPTR | |
MOVX @DPTR, A | |
;Restore DPTR | |
LCALL RESTOREDPTR | |
LJMP PROGRESS | |
;Instruction: STC | |
;Opcode: 37 | |
;Description: EBCY is set. | |
SETB EBCY | |
LJMP PROGRESS | |
;Instruction: LDSI data8 | |
;Opcode: 38 | |
;Description: Undocemented. | |
LJMP PROGRESS | |
;Instruction: DAD SP | |
;Opcode: 39 | |
;Description: Contents of register pair H are added with ESP and the EBCY is set | |
;if result is larger than 16-bits. | |
;Clear carry to avoid confusion. | |
CLR C; | |
;Move the LSB of register H to A and LSB of H pair with it and move it back to | |
;EL. | |
MOV A, EL | |
ADD A, ESPL | |
MOV ESPL, A | |
;Move the H pairs's MSB into A and add MSB of H pair to it with the previous carry. | |
MOV A, EH | |
ADDC A, ESPH | |
MOV ESPH, A | |
JNC DONE39 | |
;Set EBCY if CY is set. | |
SETB EBCY | |
DONE39: LJMP PROGRESS | |
;Instruction: LDA address16 | |
;Opcode: 3A | |
;Description: Contents of address16 is transferred to EACC. | |
;Get address16 and push into stack. | |
INC DPTR | |
MOVX A, @DPTR | |
PUSH ACC | |
INC DPTR | |
MOVX A, @DPTR | |
PUSH ACC | |
;Save DPTR | |
LCALL SAVEDPTR | |
;Pop address16 into DPTR and move content of address16 into A | |
POP DPL | |
POP DPH | |
MOVX A, @DPTR | |
MOV EACC, A | |
;Restore DPTR | |
LCALL RESTOREDPTR | |
LJMP PROGRESS | |
;Instruction: DCX SP | |
;Opcode: 3B | |
;Description: Decrements the content of ESP. | |
;Move ESPL to A check if zero. Decrement ED if true. | |
MOV A, ESPL | |
JNZ DONE3B; | |
DEC ESPH; | |
DONE3B: DEC ESPL; | |
LJMP PROGRESS | |
;Instruction: INR A | |
;Opcode: 3C | |
;Description: Increments the content of EACC. | |
;Clear carry bit to avoid confusion. | |
CLR C | |
;Move EL to A and add one to increment with carry notification. | |
MOV A, EACC | |
ADD A, #01; | |
MOV EACC, A | |
;Check for carry flag and set bits as needed. | |
JNC DONE3C | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
DONE3C: LJMP PROGRESS | |
;Instruction: DCR A | |
;Opcode: 3D | |
;Description: Decrements the content of EACC. | |
;Clear carry bit to avoid confusion. | |
CLR C | |
;Move EACC to A and add FF to decrement with carry notification. | |
MOV A, EACC | |
ADD A, #0FFH; | |
MOV EACC, A | |
;Check for carry flag and set bits as needed. | |
JNC DONE3D | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
DONE3D: LJMP PROGRESS | |
;Instruction: MVI A, data8 | |
;Opcode: 3E | |
;Description: Given data8 is stored in EACC. | |
;Increment DPTR to point to data8. | |
INC DPTR | |
;Move data8 into A and then into EL. | |
MOVX A, @DPTR | |
MOV EACC, A | |
LJMP PROGRESS | |
;Instruction: CMC | |
;Opcode: 3F | |
;Description: Carry flag is complemented. | |
CPL EBCY | |
LJMP PROGRESS | |
;Instruction: MOV B, B | |
;Opcode: 40 | |
;Description: Move contents of register B into B. | |
LJMP PROGRESS | |
;Instruction: MOV B, C | |
;Opcode: 41 | |
;Description: Move contents of register C into B. | |
MOV EB, EC | |
LJMP PROGRESS | |
;Instruction: MOV B, D | |
;Opcode: 42 | |
;Description: Move contents of register D into B. | |
MOV EB, ED | |
LJMP PROGRESS | |
;Instruction: MOV B, E | |
;Opcode: 43 | |
;Description: Move contents of register E into B. | |
MOV EB, EE | |
LJMP PROGRESS | |
;Instruction: MOV B, EH | |
;Opcode: 44 | |
;Description: Move contents of register H into B. | |
MOV EB, EH | |
LJMP PROGRESS | |
;Instruction: MOV B, EL | |
;Opcode: 45 | |
;Description: Move contents of register L into B. | |
MOV EB, EL | |
LJMP PROGRESS | |
;Instruction: MOV B, M | |
;Opcode: 46 | |
;Description: Move contents of memory location given by HL into B. | |
;Save DPTR | |
LCALL SAVEDPTR | |
;Move HL into DPTR and get data from EXMEM | |
MOV DPH, EH | |
MOV DPL, EL | |
MOVX A, @DPTR | |
MOV EB, A | |
;Restore DPTR | |
LCALL RESTOREDPTR | |
LJMP PROGRESS | |
;Instruction: MOV B, A | |
;Opcode: 47 | |
;Description: Move contents of EACC into B. | |
MOV EB, EACC | |
LJMP PROGRESS | |
;Instruction: MOV C, B | |
;Opcode: 48 | |
;Description: Move contents of B into C. | |
MOV EC, EB | |
LJMP PROGRESS | |
;Instruction: MOV C, C | |
;Opcode: 49 | |
;Description: Move contents of C into C. | |
LJMP PROGRESS | |
;Instruction: MOV C, D | |
;Opcode: 4A | |
;Description: Move contents of D into C. | |
MOV EC, ED | |
LJMP PROGRESS | |
;Instruction: MOV C, E | |
;Opcode: 4B | |
;Description: Move contents of E into C. | |
MOV EC, EE | |
LJMP PROGRESS | |
;Instruction: MOV C, EH | |
;Opcode: 4C | |
;Description: Move contents of H into C. | |
MOV EC, EH | |
LJMP PROGRESS | |
;Instruction: MOV C, EL | |
;Opcode: 4D | |
;Description: Move contents of L into C. | |
MOV EC, EL | |
LJMP PROGRESS | |
;Instruction: MOV C, M | |
;Opcode: 4E | |
;Description: Move contents of memory location given by H into C. | |
;Save DPTR | |
LCALL SAVEDPTR | |
;Move HL into DPTR and get data from EXMEM | |
MOV DPH, EH | |
MOV DPL, EL | |
MOVX A, @DPTR | |
MOV EC, A | |
;Restore DPTR | |
LCALL RESTOREDPTR | |
LJMP PROGRESS | |
;Instruction: MOV C, A | |
;Opcode: 4F | |
;Description: Move contents of EACC into C. | |
MOV EC, EACC | |
LJMP PROGRESS | |
;Instruction: MOV D, B | |
;Opcode: 50 | |
;Description: Move contents of register B into D. | |
MOV ED, EB | |
LJMP PROGRESS | |
;Instruction: MOV D, C | |
;Opcode: 51 | |
;Description: Move contents of register C into D. | |
MOV ED, EC | |
LJMP PROGRESS | |
;Instruction: MOV D, D | |
;Opcode: 52 | |
;Description: Move contents of register D into D. | |
LJMP PROGRESS | |
;Instruction: MOV D, E | |
;Opcode: 53 | |
;Description: Move contents of register E into D. | |
MOV ED, EE | |
LJMP PROGRESS | |
;Instruction: MOV D, EH | |
;Opcode: 54 | |
;Description: Move contents of register H into D. | |
MOV ED, EH | |
LJMP PROGRESS | |
;Instruction: MOV D, EL | |
;Opcode: 55 | |
;Description: Move contents of register L into D. | |
MOV ED, EL | |
LJMP PROGRESS | |
;Instruction: MOV D, M | |
;Opcode: 56 | |
;Description: Move contents of memory location given by HL into D. | |
;Save DPTR | |
LCALL SAVEDPTR | |
;Move HL into DPTR and get data from EXMEM | |
MOV DPH, EH | |
MOV DPL, EL | |
MOVX A, @DPTR | |
MOV ED, A | |
;Restore DPTR | |
LCALL RESTOREDPTR | |
LJMP PROGRESS | |
;Instruction: MOV D, A | |
;Opcode: 57 | |
;Description: Move contents of EACC into D. | |
MOV ED, EACC | |
LJMP PROGRESS | |
;Instruction: MOV E, B | |
;Opcode: 58 | |
;Description: Move contents of B into E. | |
MOV EE, EB | |
LJMP PROGRESS | |
;Instruction: MOV E, C | |
;Opcode: 59 | |
;Description: Move contents of C into E. | |
MOV EE, EC | |
LJMP PROGRESS | |
;Instruction: MOV E, D | |
;Opcode: 5A | |
;Description: Move contents of D into E. | |
MOV EE, ED | |
LJMP PROGRESS | |
;Instruction: MOV E, E | |
;Opcode: 5B | |
;Description: Move contents of E into E. | |
LJMP PROGRESS | |
;Instruction: MOV E, EH | |
;Opcode: 5C | |
;Description: Move contents of H into E. | |
MOV EE, EH | |
LJMP PROGRESS | |
;Instruction: MOV E, EL | |
;Opcode: 5D | |
;Description: Move contents of L into C. | |
MOV EE, EL | |
LJMP PROGRESS | |
;Instruction: MOV E, M | |
;Opcode: 5E | |
;Description: Move contents of memory location given by H into E. | |
;Save DPTR | |
LCALL SAVEDPTR | |
;Move HL into DPTR and get data from EXMEM | |
MOV DPH, EH | |
MOV DPL, EL | |
MOVX A, @DPTR | |
MOV EE, A | |
;Restore DPTR | |
LCALL RESTOREDPTR | |
LJMP PROGRESS | |
;Instruction: MOV E, A | |
;Opcode: 5F | |
;Description: Move contents of EACC into E. | |
MOV EE, EACC | |
LJMP PROGRESS | |
;Instruction: MOV H, B | |
;Opcode: 60 | |
;Description: Move contents of register B into H. | |
MOV EH, EB | |
LJMP PROGRESS | |
;Instruction: MOV H, C | |
;Opcode: 61 | |
;Description: Move contents of register C into H. | |
MOV EH, EC | |
LJMP PROGRESS | |
;Instruction: MOV H, D | |
;Opcode: 62 | |
;Description: Move contents of register D into H. | |
MOV EH, ED | |
LJMP PROGRESS | |
;Instruction: MOV H, E | |
;Opcode: 63 | |
;Description: Move contents of register E into H. | |
MOV EH, EE | |
LJMP PROGRESS | |
;Instruction: MOV H, EH | |
;Opcode: 64 | |
;Description: Move contents of register H into H. | |
LJMP PROGRESS | |
;Instruction: MOV H, EL | |
;Opcode: 65 | |
;Description: Move contents of register L into H. | |
MOV EH, EL | |
LJMP PROGRESS | |
;Instruction: MOV H, M | |
;Opcode: 66 | |
;Description: Move contents of memory location given by HL into H. | |
;Save DPTR | |
LCALL SAVEDPTR | |
;Move HL into DPTR and get data from EXMEM | |
MOV DPH, EH | |
MOV DPL, EL | |
MOVX A, @DPTR | |
MOV EH, A | |
;Restore DPTR | |
LCALL RESTOREDPTR | |
LJMP PROGRESS | |
;Instruction: MOV H, A | |
;Opcode: 67 | |
;Description: Move contents of EACC into H. | |
MOV EH, EACC | |
LJMP PROGRESS | |
;Instruction: MOV L, B | |
;Opcode: 68 | |
;Description: Move contents of B into L. | |
MOV EL, EB | |
LJMP PROGRESS | |
;Instruction: MOV L, C | |
;Opcode: 69 | |
;Description: Move contents of C into L. | |
MOV EL, EC | |
LJMP PROGRESS | |
;Instruction: MOV L, D | |
;Opcode: 6A | |
;Description: Move contents of D into L. | |
MOV EL, ED | |
LJMP PROGRESS | |
;Instruction: MOV L, E | |
;Opcode: 6B | |
;Description: Move contents of E into L. | |
MOV EL, EE | |
LJMP PROGRESS | |
;Instruction: MOV L, EH | |
;Opcode: 6C | |
;Description: Move contents of H into L. | |
MOV EL, EH | |
LJMP PROGRESS | |
;Instruction: MOV L, EL | |
;Opcode: 6D | |
;Description: Move contents of L into L. | |
LJMP PROGRESS | |
;Instruction: MOV L, M | |
;Opcode: 6E | |
;Description: Move contents of memory location given by H into L. | |
;Save DPTR | |
LCALL SAVEDPTR | |
;Move HL into DPTR and get data from EXMEM | |
MOV DPH, EH | |
MOV DPL, EL | |
MOVX A, @DPTR | |
MOV EL, A | |
;Restore DPTR | |
LCALL RESTOREDPTR | |
LJMP PROGRESS | |
;Instruction: MOV L, A | |
;Opcode: 6F | |
;Description: Move contents of EACC into L. | |
MOV EL, EACC | |
LJMP PROGRESS | |
;Instruction: MOV M, B | |
;Opcode: 70 | |
;Description: Move contents of register B into the memory location given by | |
;register pair H. | |
;Save DPTR | |
LCALL SAVEDPTR | |
;Move contents of register pair H into DPTR and get content of EB into A. | |
MOV DPH, EH | |
MOV DPL, EL | |
MOV A, EB | |
;Transfer A to EXMEM using DPTR. | |
MOVX @DPTR, A | |
;Restore DPTR | |
LCALL RESTOREDPTR | |
LJMP PROGRESS | |
;Instruction: MOV M, C | |
;Opcode: 71 | |
;Description: Move contents of register C into the memory location given by | |
;register pair H. | |
;Save DPTR | |
LCALL SAVEDPTR | |
;Move contents of register pair H into DPTR and get content of EC into A. | |
MOV DPH, EH | |
MOV DPL, EL | |
MOV A, EC | |
;Transfer A to EXMEM using DPTR. | |
MOVX @DPTR, A | |
;Restore DPTR | |
LCALL RESTOREDPTR | |
LJMP PROGRESS | |
;Instruction: MOV M, D | |
;Opcode: 72 | |
;Description: Move contents of register D into the memory location given by | |
;register pair H. | |
;Save DPTR | |
LCALL SAVEDPTR | |
;Move contents of register pair H into DPTR and get content of ED into A. | |
MOV DPH, EH | |
MOV DPL, EL | |
MOV A, ED | |
;Transfer A to EXMEM using DPTR. | |
MOVX @DPTR, A | |
;Restore DPTR | |
LCALL RESTOREDPTR | |
LJMP PROGRESS | |
;Instruction: MOV M, E | |
;Opcode: 73 | |
;Description: Move contents of register E into the memory location given by | |
;register pair H. | |
;Save DPTR | |
LCALL SAVEDPTR | |
;Move contents of register pair H into DPTR and get content of EB into A. | |
MOV DPH, EH | |
MOV DPL, EL | |
MOV A, EE | |
;Transfer A to EXMEM using DPTR. | |
MOVX @DPTR, A | |
;Restore DPTR | |
LCALL RESTOREDPTR | |
LJMP PROGRESS | |
;Instruction: MOV M, EH | |
;Opcode: 74 | |
;Description: Move contents of register H into the memory location given by | |
;register pair H. | |
;Save DPTR | |
LCALL SAVEDPTR | |
;Move contents of register pair H into DPTR and get content of EB into A. | |
MOV DPH, EH | |
MOV DPL, EL | |
MOV A, EH | |
;Transfer A to EXMEM using DPTR. | |
MOVX @DPTR, A | |
;Restore DPTR | |
LCALL RESTOREDPTR | |
LJMP PROGRESS | |
;Instruction: MOV M, EL | |
;Opcode: 75 | |
;Description: Move contents of register L into the memory location given by | |
;register pair H. | |
;Save DPTR | |
LCALL SAVEDPTR | |
;Move contents of register pair H into DPTR and get content of EB into A. | |
MOV DPH, EH | |
MOV DPL, EL | |
MOV A, EL | |
;Transfer A to EXMEM using DPTR. | |
MOVX @DPTR, A | |
;Restore DPTR | |
LCALL RESTOREDPTR | |
LJMP PROGRESS | |
;Instruction: HLT | |
;Opcode: 76 | |
;Description: Halts the MPU. | |
HALT: SJMP HALT | |
;Instruction: MOV M, A | |
;Opcode: 77 | |
;Description: Move contents of EACC into the memory location given by | |
;register pair H. | |
;Save DPTR | |
LCALL SAVEDPTR | |
;Move contents of register pair H into DPTR and get content of EACC into A. | |
MOV DPH, EH | |
MOV DPL, EL | |
MOV A, EACC | |
;Transfer A to EXMEM using DPTR. | |
MOVX @DPTR, A | |
;Restore DPTR | |
LCALL RESTOREDPTR | |
LJMP PROGRESS | |
;Instruction: MOV A, B | |
;Opcode: 78 | |
;Description: Move contents of register B into EACC. | |
MOV EACC, EB | |
LJMP PROGRESS | |
;Instruction: MOV A, C | |
;Opcode: 79 | |
;Description: Move contents of register C into EACC. | |
MOV EACC, EC | |
LJMP PROGRESS | |
;Instruction: MOV A, D | |
;Opcode: 7A | |
;Description: Move contents of register D into EACC. | |
MOV EACC, ED | |
LJMP PROGRESS | |
;Instruction: MOV A, E | |
;Opcode: 7B | |
;Description: Move contents of register E into EACC. | |
MOV EACC, EE | |
LJMP PROGRESS | |
;Instruction: MOV A, EH | |
;Opcode: 7C | |
;Description: Move contents of register H into EACC. | |
MOV EACC, EH | |
LJMP PROGRESS | |
;Instruction: MOV A, EL | |
;Opcode: 7D | |
;Description: Move contents of register L into EACC. | |
MOV EACC, EL | |
LJMP PROGRESS | |
;Instruction: MOV A, M | |
;Opcode: 7E | |
;Description: Move contents of memory location given by register pair H into EACC. | |
;Save DPTR | |
LCALL SAVEDPTR | |
;Move register H into DPTR and get content into A and move it into EACC. | |
MOV DPH, EH | |
MOV DPL, EL | |
MOVX A, @DPTR | |
MOV EACC, A | |
;Restore DPTR | |
LCALL RESTOREDPTR | |
LJMP PROGRESS | |
;Instruction: MOV A, A | |
;Opcode: 7F | |
;Description: Move contents of EACC into EACC. | |
LJMP PROGRESS | |
;Instruction: ADD B | |
;Opcode: 80 | |
;Description: Add register EB to EACC | |
MOV A, EACC | |
ADD A, EB | |
MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: ADD C | |
;Opcode: 81 | |
;Description: Add register EC to EACC | |
MOV A, EACC | |
ADD A, EC | |
MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: ADD D | |
;Opcode: 82 | |
;Description: Add register ED to EACC | |
MOV A, EACC | |
ADD A, ED | |
MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: ADD E | |
;Opcode: 83 | |
;Description: Add register EE to EACC | |
MOV A, EACC | |
ADD A, EE | |
MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: ADD H | |
;Opcode: 84 | |
;Description: Add register EH to EACC | |
MOV A, EACC | |
ADD A, EH | |
MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: ADD L | |
;Opcode: 85 | |
;Description: Add register EL to EACC | |
MOV A, EACC | |
ADD A, EL | |
MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: ADD M | |
;Opcode: 86 | |
;Description: Add value pointed by register pair EH and EL to accumulator. | |
LCALL SAVEDPTR | |
MOV DPH, EH | |
MOV DPL, EL | |
MOVX A, @DPTR | |
MOV B, A | |
MOV A, EACC | |
ADD A, B | |
MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: ADD L | |
;Opcode: 87 | |
;Description: Add register EACC to EACC | |
MOV A, EACC | |
ADD A, EACC | |
MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: ADC B | |
;Opcode: 88 | |
;Description: Add register EB to EACC with CARRY | |
MOV A, EACC | |
ADD A, EB | |
JNB EBCY, DONE88 | |
ADD A, #01H; | |
DONE88: MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: ADC C | |
;Opcode: 89 | |
;Description: Add register EC to EACC with CARRY | |
MOV A, EACC | |
ADD A, EC | |
JNB EBCY, DONE89 | |
ADD A, #01H; | |
DONE89: MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: ADC D | |
;Opcode: 8A | |
;Description: Add register EB to EACC with CARRY | |
MOV A, EACC | |
ADD A, ED | |
JNB EBCY, DONE8A | |
ADD A, #01H; | |
DONE8A: MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: ADC E | |
;Opcode: 8B | |
;Description: Add register EE to EACC with CARRY | |
MOV A, EACC | |
ADD A, EE | |
JNB EBCY, DONE8B | |
ADD A, #01H; | |
DONE8B: MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: ADC H | |
;Opcode: 8C | |
;Description: Add register EH to EACC with CARRY | |
MOV A, EACC | |
ADD A, EH | |
JNB EBCY, DONE8C | |
ADD A, #01H; | |
DONE8C: MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: ADC L | |
;Opcode: 8D | |
;Description: Add register EL to EACC with CARRY | |
MOV A, EACC | |
ADD A, EL | |
JNB EBCY, DONE8D | |
ADD A, #01H; | |
DONE8D: MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: ADC M | |
;Opcode: 8E | |
;Description: Add register H to EACC with carry. | |
LCALL SAVEDPTR | |
MOV DPH, EH | |
MOV DPL, EL | |
MOVX A, @DPTR | |
MOV B, A | |
MOV A, EACC | |
ADD A, B | |
JNB EBCY, DONE8E | |
ADD A, #01H; | |
DONE8E: MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: ADC A | |
;Opcode: 8F | |
;Description: Add register EACC to EACC with CARRY | |
MOV A, EACC | |
ADD A, EACC | |
JNB EBCY, DONE8F | |
ADD A, #01H; | |
DONE8F: MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: SUB B | |
;Opcode: 90 | |
;Description: Subtract register EB from EACC | |
MOV A, EACC | |
CLR C | |
SUBB A, EB | |
MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: SUB C | |
;Opcode: 91 | |
;Description: Subtract register EC from EACC | |
MOV A, EACC | |
CLR C | |
SUBB A, EC | |
MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: SUB D | |
;Opcode: 92 | |
;Description: Subtract register ED from EACC | |
MOV A, EACC | |
CLR C | |
SUBB A, ED | |
MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: SUB E | |
;Opcode: 93 | |
;Description: Subtract register EE from EACC | |
MOV A, EACC | |
CLR C | |
SUBB A, EE | |
MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: SUB H | |
;Opcode: 94 | |
;Description: Subtract register EH from EACC | |
MOV A, EACC | |
CLR C | |
SUBB A, EH | |
MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: SUB L | |
;Opcode: 95 | |
;Description: Subtract register EL from EACC | |
MOV A, EACC | |
CLR C | |
SUBB A, EL | |
MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: SUB M | |
;Opcode: 96 | |
;Description: Subtract value at memory location pointed by EH and EL from accumulator. | |
LCALL SAVEDPTR | |
MOV DPH, EH | |
MOV DPL, EL | |
MOVX A, @DPTR | |
MOV B, A | |
MOV A, EACC | |
CLR C | |
SUBB A, B | |
MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: SUB A | |
;Opcode: 97 | |
;Description: Subtract register EACC from EACC | |
MOV EACC, #00H | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: SBB B | |
;Opcode: 98 | |
;Description: Subtract register EB and borrow from EACC. | |
MOV A, EACC | |
CLR C | |
SUBB A, EB | |
JNB EBCY, DONE98 | |
ADD A, #0FFH | |
DONE98: MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: SBB C | |
;Opcode: 99 | |
;Description: Subtract register EC and borrow from EACC | |
MOV A, EACC | |
CLR C | |
SUBB A, EC | |
JNB EBCY, DONE99 | |
ADD A, #0FFH | |
DONE99: MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: SBB D | |
;Opcode: 9A | |
;Description: Subtract register ED and borrow from EACC | |
MOV A, EACC | |
CLR C | |
SUBB A, ED | |
JNB EBCY, DONE9A | |
ADD A, #0FFH | |
DONE9A: MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: SUB E | |
;Opcode: 9B | |
;Description: Subtract register EE and borrow from EACC | |
MOV A, EACC | |
CLR C | |
SUBB A, EE | |
JNB EBCY, DONE9B | |
ADD A, #0FFH | |
DONE9B: MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: SUB H | |
;Opcode: 9C | |
;Description: Subtract register EH and borrow from EACC | |
MOV A, EACC | |
CLR C | |
SUBB A, EH | |
JNB EBCY, DONE9C | |
ADD A, #0FFH | |
DONE9C: MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: SUB L | |
;Opcode: 9D | |
;Description: Subtract register EL and borrow from EACC | |
MOV A, EACC | |
CLR C | |
SUBB A, EL | |
JNB EBCY, DONE9D | |
ADD A, #0FFH | |
DONE9D: MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: SUB M | |
;Opcode: 9E | |
;Description: Subtract value at memory location pointed by EH and EL and borrow from accumulator. | |
LCALL SAVEDPTR | |
MOV DPH, EH | |
MOV DPL, EL | |
MOVX A, @DPTR | |
MOV B, A | |
MOV A, EACC | |
CLR C | |
SUBB A, B | |
JNB EBCY, DONE9E | |
ADD A, #0FFH | |
DONE9E: MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: SBB A | |
;Opcode: 9F | |
;Description: Subtract register EACC and borrow from EACC | |
MOV A, #00H | |
JNB EBCY, DONE9F | |
MOV A, #0FFH | |
DONE9F: MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: ANA B | |
;Opcode: A0 | |
;Description: Contents of register B and accumulator are logically ANDed. | |
MOV A, EACC | |
ANL A, EB | |
MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: ANA C | |
;Opcode: A1 | |
;Description: Contents of register C and accumulator are logically ANDed. | |
MOV A, EACC | |
ANL A, EC | |
MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: ANA D | |
;Opcode: A2 | |
;Description: Contents of register D and accumulator are logically ANDed. | |
MOV A, EACC | |
ANL A, ED | |
MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: ANA E | |
;Opcode: A3 | |
;Description: Contents of register E and accumulator are logically ANDed. | |
MOV A, EACC | |
ANL A, EE | |
MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: ANA H | |
;Opcode: A4 | |
;Description: Contents of register H and accumulator are logically ANDed. | |
MOV A, EACC | |
ANL A, EH | |
MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: ANA L | |
;Opcode: A5 | |
;Description: Contents of register L and accumulator are logically ANDed. | |
MOV A, EACC | |
ANL A, EL | |
MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: ANA M | |
;Opcode: A6 | |
;Description: Value at memory location pointed by EH and EL and accumulator are logically ANDed. | |
LCALL SAVEDPTR | |
MOV DPH, EH | |
MOV DPL, EL | |
MOVX A, @DPTR | |
ANL A, EACC | |
MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: ANA A | |
;Opcode: A7 | |
;Description: Contents of accumulator and accumulator are logically ANDed. | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: XRA B | |
;Opcode: A8 | |
;Description: Contents of register B and accumulator are logically XORed. | |
MOV A, EACC | |
XRL A, EB | |
MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: XRA C | |
;Opcode: A9 | |
;Description: Contents of register C and accumulator are logically XORed. | |
MOV A, EACC | |
XRL A, EC | |
MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: XRA D | |
;Opcode: AA | |
;Description: Contents of register D and accumulator are logically XORed. | |
MOV A, EACC | |
XRL A, ED | |
MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: XRA E | |
;Opcode: AB | |
;Description: Contents of register E and accumulator are logically XORed. | |
MOV A, EACC | |
XRL A, EE | |
MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: XRA H | |
;Opcode: AC | |
;Description: Contents of register H and accumulator are logically XORed. | |
MOV A, EACC | |
XRL A, EH | |
MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: XRA L | |
;Opcode: AD | |
;Description: Contents of register L and accumulator are logically XORed. | |
MOV A, EACC | |
XRL A, EL | |
MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: XRA M | |
;Opcode: AE | |
;Description: Value at memory location pointed by EH and EL and accumulator are logically XORed. | |
LCALL SAVEDPTR | |
MOV DPH, EH | |
MOV DPL, EL | |
MOVX A, @DPTR | |
XRL A, EACC | |
MOV EACC, A | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS | |
;Instruction: XRA A | |
;Opcode: AF | |
;Description: Contents of accumulator and accumulator are logically XORed. | |
MOV EACC, #00H | |
;;;;; WRITE CODE TO SET FLAGS AS PER THE DESCRIPTION. ;;;;;; | |
LJMP PROGRESS |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment