Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; a jumptable containing a function for each 8051 instruction
- ; (up to register choice and operands of same type, reti left out)
- ; I wanted to fit the table into 256 bytes, so I stuffed
- ; instructions into the immediate value and relative
- ; jump operands of other instructions (jumps always go to ret)
- ; bit addresses, direct addresses are left as is to be configurable,
- ; absolute/block jumps can't contain specific instructions either
- ; This is for the purpose of determining the timing of each instructions
- ; since I don't know the timings of some 8051 mcus
- ; most timings are just calculated by taking the base time by jumping to
- ; INSRET (directly returning) and then subtracting that from the time
- ; to execute the chosen function
- ; towards the end there are a few instructions which modify the stack
- ; and require a special treatment
- ; set to wherever you feel comfortable to write random data to
- FREE_XDATA XDATA 08000h
- ; (not memory address of r0-r7, not sp)
- FREE_DATA DATA ACC
- FREE_BIT BIT ACC.0
- INSTART:
- INS3: LJMP retloc
- INS2: AJMP retloc
- INS15: DB 020h ;JB FREE_BIT, $+6
- DB FREE_BIT
- INS7: DB 006h ;INC @R0
- INSRET: RET
- INS104: MOV R1, A
- RET
- INS77: DB 0B4h ;CJNE A, #024h, $+0
- INS17: DB 024h ;ADD A, #00
- INS1: DB 000h ;NOP
- RET
- INS9: DB 010h ;JBC FREE_BIT, $+9
- DB FREE_BIT
- INS8: DB 009h ;INC R1
- RET
- INS101: CPL A
- RET
- INS102: MOV FREE_DATA, A
- RET
- INS21: DB 030h ;JNB FREE_BIT, $+0x13
- DB FREE_BIT
- INS10: DB 013h ;RRC A
- RET
- INS6: INC FREE_DATA
- RET
- INS79: DB 0B6h ;CJNE @R0, #040h, $+0x14
- INS27: DB 040h ;JC jcr
- INS11: DB 014h ;DEC A
- RET
- INS34: DB 050h ;JNC $+0x16
- INS13: DB 016h ;DEC @R0
- RET
- INS41: DB 060h ;JZ $+0x19
- INS14: DB 019h ;DEC R1
- RET
- INS48: DB 070h ;JNZ $+03
- INS4: DB 003h ;RR A
- RET
- INS54: DB 080h ;SJMP $+0x26
- INS19: DB 026h ;ADD A, @R0
- RET
- INS78: DB 0B5h ;CJNE A, FREE_DATA, $+0x29
- DB FREE_DATA
- INS20: DB 029h ;ADD A, R1
- RET
- INS80: DB 0B9h ;CJNE R1, #0D9h, $+0x33
- INS92: DB 0D9h ;DJNZ R1, $+0x33
- INS22: DB 033h ;RLC A
- RET
- INS12: DEC FREE_DATA
- RET
- INS98: MOV A, R1
- RET
- INS90: DB 0D5h ;DJNZ FREE_DATA, $+0x39
- DB FREE_DATA
- INS26: DB 039h ;ADDC A, R1
- RET
- INS103: MOV @R0, A
- RET
- INS88: SETB C
- RET
- INS89: DA A
- RET
- INS18: ADD A, FREE_DATA
- RET
- INS97: MOV A, @R0
- RET
- INS91: XCHD A, @R0
- RET
- INS23: DB 034h ;ADDC A, #23h
- INS16: DB 023h ;RL A
- RET
- INS24: ADDC A, FREE_DATA
- RET
- INS85: XCH A, @R0
- RET
- INS28: ORL FREE_DATA, A
- RET
- INS29: DB 043h ;ORL FREE_DATA, #04h
- DB FREE_DATA
- INS5: DB 004h ;INC A
- RET
- INS96: MOV A, FREE_DATA
- RET
- INS30: DB 044h ;ORL A, #046h
- INS32: DB 046h ;ORL A, @R0
- RET
- INS31: ORL A, FREE_DATA
- RET
- INS33: ORL A, R1
- RET
- INS35: ANL FREE_DATA, A
- RET
- INS86: XCH A, R1
- RET
- INS87: SETB FREE_BIT
- RET
- INS36: DB 053h ;ANL FREE_DATA, #059h
- DB FREE_DATA
- INS40: DB 059h ;ANL A, R1
- RET
- INS37: DB 054h ;ANL A, #056h
- INS39: DB 056h ;ANL A, @R0
- RET
- INS38: ANL A, FREE_DATA
- RET
- INS42: XRL FREE_DATA, A
- RET
- INS43: DB 063h ;XRL FREE_DATA, #0A4h
- DB FREE_DATA
- INS71: DB 0A4h ;MUL AB
- RET
- INS44: DB 064h ;XRL A, #066h
- INS46: DB 066h ;XRL A, @R0
- RET
- INS45: XRL A, FREE_DATA
- RET
- INS49: ORL C, FREE_BIT
- RET
- INS50: DB 074h ;MOV A, #084h
- INS57: DB 084h ;DIV AB
- RET
- INS51: DB 075h ;MOV FREE_DATA, #0E4h
- DB FREE_DATA
- INS95: DB 0E4h ;CLR A
- RET
- INS52: DB 076h ;MOV @R0, #069h
- INS47: DB 069h ;XRL A, R1
- RET
- INS53: DB 079h ;MOV R1, #036h
- INS25: DB 036h ;ADDC A, @R0
- RET
- INS55: ANL C, FREE_BIT
- RET
- INS56: MOVC A, @A+PC
- RET
- INS58: MOV FREE_DATA, FREE_DATA
- RET
- INS59: MOV FREE_DATA, @R0
- RET
- INS60: MOV FREE_DATA, R1
- RET
- INS61: DB 090h ;MOV DPTR, #...
- INS62: DB 092h ;MOV FREE_BIT, C
- DB FREE_BIT
- RET
- INS63: MOVC A, @A+DPTR
- RET
- INS64: DB 094h ;SUBB A, #096h
- INS66: DB 096h ;SUBB A, @R0
- RET
- INS65: SUBB A, FREE_DATA
- RET
- INS67: SUBB A, R1
- RET
- INS68: ORL C, /FREE_BIT
- RET
- INS69: MOV C, FREE_BIT
- RET
- INS70: INC DPTR
- RET
- INS72: MOV @R0, FREE_DATA
- RET
- INS73: MOV R1, FREE_DATA
- RET
- INS74: ANL C, /FREE_BIT
- RET
- INS75: CPL FREE_BIT
- RET
- INS76: CPL C
- RET
- INS81: CLR FREE_BIT
- RET
- INS82: CLR C
- RET
- INS83: SWAP A
- RET
- INS84: XCH A, FREE_DATA
- RET
- INS93: MOV DPTR, #FREE_XDATA
- MOVX A, @DPTR
- RET
- INS94: MOVX A, @R0
- RET
- INS99: MOV DPTR, #FREE_XDATA
- MOVX @DPTR, A
- RET
- INS100: MOVX @R0, A
- RET
- ; -- these instructions modify the stack so they must be calculated specifically
- POPI: INC SP ;t(pop) = t - t(inc direct) - t(base)
- POP FREE_DATA
- RET
- PUSHI: PUSH FREE_DATA ;t(push) = t - t(dec direct) - t(base)
- DEC SP
- RET
- RETIN: MOV DPTR, #retloc
- PUSH DPL ;t(ret) = t - 2*t(push direct)
- PUSH DPH ; - t(mov dptr, #immed16) - t(base)
- retloc: RET
- LCALLI: LCALL lcloc ;t(lcall) = t - t(ret) - t(base)
- lcloc: RET
- ACALLI: ACALL acloc ;t(acall) = t - t(ret) - t(base)
- acloc: RET
- JMPI: MOV DPTR, #retloc
- CLR A ;t(jmp @a+dptr) = t - t(clr a) - t(base)
- JMP @A+DPTR ; - t(mov dptr, #immed16)
- TIME_ADDRESS_TABLE:
- DB (INSRET - INSTART) ;t(base)
- DB (INS1 - INSTART)
- DB (INS2 - INSTART)
- DB (INS3 - INSTART)
- DB (INS4 - INSTART)
- DB (INS5 - INSTART)
- DB (INS6 - INSTART)
- DB (INS7 - INSTART)
- DB (INS8 - INSTART)
- DB (INS9 - INSTART)
- DB (INS10 - INSTART)
- DB (INS11 - INSTART)
- DB (INS12 - INSTART)
- DB (INS13 - INSTART)
- DB (INS14 - INSTART)
- DB (INS15 - INSTART)
- DB (INS16 - INSTART)
- DB (INS17 - INSTART)
- DB (INS18 - INSTART)
- DB (INS19 - INSTART)
- DB (INS20 - INSTART)
- DB (INS21 - INSTART)
- DB (INS22 - INSTART)
- DB (INS23 - INSTART)
- DB (INS24 - INSTART)
- DB (INS25 - INSTART)
- DB (INS26 - INSTART)
- DB (INS27 - INSTART)
- DB (INS28 - INSTART)
- DB (INS29 - INSTART)
- DB (INS30 - INSTART)
- DB (INS31 - INSTART)
- DB (INS32 - INSTART)
- DB (INS33 - INSTART)
- DB (INS34 - INSTART)
- DB (INS35 - INSTART)
- DB (INS36 - INSTART)
- DB (INS37 - INSTART)
- DB (INS38 - INSTART)
- DB (INS39 - INSTART)
- DB (INS40 - INSTART)
- DB (INS41 - INSTART)
- DB (INS42 - INSTART)
- DB (INS43 - INSTART)
- DB (INS44 - INSTART)
- DB (INS45 - INSTART)
- DB (INS46 - INSTART)
- DB (INS47 - INSTART)
- DB (INS48 - INSTART)
- DB (INS49 - INSTART)
- DB (INS50 - INSTART)
- DB (INS51 - INSTART)
- DB (INS52 - INSTART)
- DB (INS53 - INSTART)
- DB (INS54 - INSTART)
- DB (INS55 - INSTART)
- DB (INS56 - INSTART)
- DB (INS57 - INSTART)
- DB (INS58 - INSTART)
- DB (INS59 - INSTART)
- DB (INS60 - INSTART)
- DB (INS61 - INSTART)
- DB (INS62 - INSTART)
- DB (INS63 - INSTART)
- DB (INS64 - INSTART)
- DB (INS65 - INSTART)
- DB (INS66 - INSTART)
- DB (INS67 - INSTART)
- DB (INS68 - INSTART)
- DB (INS69 - INSTART)
- DB (INS70 - INSTART)
- DB (INS71 - INSTART)
- DB (INS72 - INSTART)
- DB (INS73 - INSTART)
- DB (INS74 - INSTART)
- DB (INS75 - INSTART)
- DB (INS76 - INSTART)
- DB (INS77 - INSTART)
- DB (INS78 - INSTART)
- DB (INS79 - INSTART)
- DB (INS80 - INSTART)
- DB (INS81 - INSTART)
- DB (INS82 - INSTART)
- DB (INS83 - INSTART)
- DB (INS84 - INSTART)
- DB (INS85 - INSTART)
- DB (INS86 - INSTART)
- DB (INS87 - INSTART)
- DB (INS88 - INSTART)
- DB (INS89 - INSTART)
- DB (INS90 - INSTART)
- DB (INS91 - INSTART)
- DB (INS92 - INSTART)
- DB (INS93 - INSTART)
- DB (INS94 - INSTART)
- DB (INS95 - INSTART)
- DB (INS96 - INSTART)
- DB (INS97 - INSTART)
- DB (INS98 - INSTART)
- DB (INS99 - INSTART)
- DB (INS100 - INSTART)
- DB (INS101 - INSTART)
- DB (INS102 - INSTART)
- DB (INS103 - INSTART)
- DB (INS104 - INSTART)
- DB (POPI - INSTART)
- DB (PUSHI - INSTART)
- DB (RETIN - INSTART)
- DB (LCALLI - INSTART)
- DB (ACALLI - INSTART)
- DB (JMPI - INSTART)
- ;note: RETI not implemented
- TIME_ADDRESS_TABLE_END:
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement