Advertisement
Guest User

Untitled

a guest
Sep 20th, 2019
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.16 KB | None | 0 0
  1. ; a jumptable containing a function for each 8051 instruction
  2. ; (up to register choice and operands of same type, reti left out)
  3. ; I wanted to fit the table into 256 bytes, so I stuffed
  4. ; instructions into the immediate value and relative
  5. ; jump operands of other instructions (jumps always go to ret)
  6. ; bit addresses, direct addresses are left as is to be configurable,
  7. ; absolute/block jumps can't contain specific instructions either
  8. ; This is for the purpose of determining the timing of each instructions
  9. ; since I don't know the timings of some 8051 mcus
  10. ; most timings are just calculated by taking the base time by jumping to
  11. ; INSRET (directly returning) and then subtracting that from the time
  12. ; to execute the chosen function
  13. ; towards the end there are a few instructions which modify the stack
  14. ; and require a special treatment
  15.  
  16.  
  17. ; set to wherever you feel comfortable to write random data to
  18. FREE_XDATA XDATA 08000h
  19. ; (not memory address of r0-r7, not sp)
  20. FREE_DATA DATA ACC
  21. FREE_BIT BIT ACC.0
  22.  
  23. INSTART:
  24. INS3: LJMP retloc
  25. INS2: AJMP retloc
  26. INS15: DB 020h ;JB FREE_BIT, $+6
  27. DB FREE_BIT
  28. INS7: DB 006h ;INC @R0
  29. INSRET: RET
  30. INS104: MOV R1, A
  31. RET
  32. INS77: DB 0B4h ;CJNE A, #024h, $+0
  33. INS17: DB 024h ;ADD A, #00
  34. INS1: DB 000h ;NOP
  35. RET
  36. INS9: DB 010h ;JBC FREE_BIT, $+9
  37. DB FREE_BIT
  38. INS8: DB 009h ;INC R1
  39. RET
  40. INS101: CPL A
  41. RET
  42. INS102: MOV FREE_DATA, A
  43. RET
  44. INS21: DB 030h ;JNB FREE_BIT, $+0x13
  45. DB FREE_BIT
  46. INS10: DB 013h ;RRC A
  47. RET
  48. INS6: INC FREE_DATA
  49. RET
  50. INS79: DB 0B6h ;CJNE @R0, #040h, $+0x14
  51. INS27: DB 040h ;JC jcr
  52. INS11: DB 014h ;DEC A
  53. RET
  54. INS34: DB 050h ;JNC $+0x16
  55. INS13: DB 016h ;DEC @R0
  56. RET
  57. INS41: DB 060h ;JZ $+0x19
  58. INS14: DB 019h ;DEC R1
  59. RET
  60. INS48: DB 070h ;JNZ $+03
  61. INS4: DB 003h ;RR A
  62. RET
  63. INS54: DB 080h ;SJMP $+0x26
  64. INS19: DB 026h ;ADD A, @R0
  65. RET
  66. INS78: DB 0B5h ;CJNE A, FREE_DATA, $+0x29
  67. DB FREE_DATA
  68. INS20: DB 029h ;ADD A, R1
  69. RET
  70. INS80: DB 0B9h ;CJNE R1, #0D9h, $+0x33
  71. INS92: DB 0D9h ;DJNZ R1, $+0x33
  72. INS22: DB 033h ;RLC A
  73. RET
  74. INS12: DEC FREE_DATA
  75. RET
  76. INS98: MOV A, R1
  77. RET
  78. INS90: DB 0D5h ;DJNZ FREE_DATA, $+0x39
  79. DB FREE_DATA
  80. INS26: DB 039h ;ADDC A, R1
  81. RET
  82. INS103: MOV @R0, A
  83. RET
  84. INS88: SETB C
  85. RET
  86. INS89: DA A
  87. RET
  88. INS18: ADD A, FREE_DATA
  89. RET
  90. INS97: MOV A, @R0
  91. RET
  92. INS91: XCHD A, @R0
  93. RET
  94. INS23: DB 034h ;ADDC A, #23h
  95. INS16: DB 023h ;RL A
  96. RET
  97. INS24: ADDC A, FREE_DATA
  98. RET
  99. INS85: XCH A, @R0
  100. RET
  101. INS28: ORL FREE_DATA, A
  102. RET
  103. INS29: DB 043h ;ORL FREE_DATA, #04h
  104. DB FREE_DATA
  105. INS5: DB 004h ;INC A
  106. RET
  107. INS96: MOV A, FREE_DATA
  108. RET
  109. INS30: DB 044h ;ORL A, #046h
  110. INS32: DB 046h ;ORL A, @R0
  111. RET
  112. INS31: ORL A, FREE_DATA
  113. RET
  114. INS33: ORL A, R1
  115. RET
  116. INS35: ANL FREE_DATA, A
  117. RET
  118. INS86: XCH A, R1
  119. RET
  120. INS87: SETB FREE_BIT
  121. RET
  122. INS36: DB 053h ;ANL FREE_DATA, #059h
  123. DB FREE_DATA
  124. INS40: DB 059h ;ANL A, R1
  125. RET
  126. INS37: DB 054h ;ANL A, #056h
  127. INS39: DB 056h ;ANL A, @R0
  128. RET
  129. INS38: ANL A, FREE_DATA
  130. RET
  131. INS42: XRL FREE_DATA, A
  132. RET
  133. INS43: DB 063h ;XRL FREE_DATA, #0A4h
  134. DB FREE_DATA
  135. INS71: DB 0A4h ;MUL AB
  136. RET
  137. INS44: DB 064h ;XRL A, #066h
  138. INS46: DB 066h ;XRL A, @R0
  139. RET
  140. INS45: XRL A, FREE_DATA
  141. RET
  142. INS49: ORL C, FREE_BIT
  143. RET
  144. INS50: DB 074h ;MOV A, #084h
  145. INS57: DB 084h ;DIV AB
  146. RET
  147. INS51: DB 075h ;MOV FREE_DATA, #0E4h
  148. DB FREE_DATA
  149. INS95: DB 0E4h ;CLR A
  150. RET
  151. INS52: DB 076h ;MOV @R0, #069h
  152. INS47: DB 069h ;XRL A, R1
  153. RET
  154. INS53: DB 079h ;MOV R1, #036h
  155. INS25: DB 036h ;ADDC A, @R0
  156. RET
  157. INS55: ANL C, FREE_BIT
  158. RET
  159. INS56: MOVC A, @A+PC
  160. RET
  161. INS58: MOV FREE_DATA, FREE_DATA
  162. RET
  163. INS59: MOV FREE_DATA, @R0
  164. RET
  165. INS60: MOV FREE_DATA, R1
  166. RET
  167. INS61: DB 090h ;MOV DPTR, #...
  168. INS62: DB 092h ;MOV FREE_BIT, C
  169. DB FREE_BIT
  170. RET
  171. INS63: MOVC A, @A+DPTR
  172. RET
  173. INS64: DB 094h ;SUBB A, #096h
  174. INS66: DB 096h ;SUBB A, @R0
  175. RET
  176. INS65: SUBB A, FREE_DATA
  177. RET
  178. INS67: SUBB A, R1
  179. RET
  180. INS68: ORL C, /FREE_BIT
  181. RET
  182. INS69: MOV C, FREE_BIT
  183. RET
  184. INS70: INC DPTR
  185. RET
  186. INS72: MOV @R0, FREE_DATA
  187. RET
  188. INS73: MOV R1, FREE_DATA
  189. RET
  190. INS74: ANL C, /FREE_BIT
  191. RET
  192. INS75: CPL FREE_BIT
  193. RET
  194. INS76: CPL C
  195. RET
  196. INS81: CLR FREE_BIT
  197. RET
  198. INS82: CLR C
  199. RET
  200. INS83: SWAP A
  201. RET
  202. INS84: XCH A, FREE_DATA
  203. RET
  204. INS93: MOV DPTR, #FREE_XDATA
  205. MOVX A, @DPTR
  206. RET
  207. INS94: MOVX A, @R0
  208. RET
  209. INS99: MOV DPTR, #FREE_XDATA
  210. MOVX @DPTR, A
  211. RET
  212. INS100: MOVX @R0, A
  213. RET
  214. ; -- these instructions modify the stack so they must be calculated specifically
  215. POPI: INC SP ;t(pop) = t - t(inc direct) - t(base)
  216. POP FREE_DATA
  217. RET
  218. PUSHI: PUSH FREE_DATA ;t(push) = t - t(dec direct) - t(base)
  219. DEC SP
  220. RET
  221. RETIN: MOV DPTR, #retloc
  222. PUSH DPL ;t(ret) = t - 2*t(push direct)
  223. PUSH DPH ; - t(mov dptr, #immed16) - t(base)
  224. retloc: RET
  225. LCALLI: LCALL lcloc ;t(lcall) = t - t(ret) - t(base)
  226. lcloc: RET
  227. ACALLI: ACALL acloc ;t(acall) = t - t(ret) - t(base)
  228. acloc: RET
  229. JMPI: MOV DPTR, #retloc
  230. CLR A ;t(jmp @a+dptr) = t - t(clr a) - t(base)
  231. JMP @A+DPTR ; - t(mov dptr, #immed16)
  232. TIME_ADDRESS_TABLE:
  233. DB (INSRET - INSTART) ;t(base)
  234. DB (INS1 - INSTART)
  235. DB (INS2 - INSTART)
  236. DB (INS3 - INSTART)
  237. DB (INS4 - INSTART)
  238. DB (INS5 - INSTART)
  239. DB (INS6 - INSTART)
  240. DB (INS7 - INSTART)
  241. DB (INS8 - INSTART)
  242. DB (INS9 - INSTART)
  243. DB (INS10 - INSTART)
  244. DB (INS11 - INSTART)
  245. DB (INS12 - INSTART)
  246. DB (INS13 - INSTART)
  247. DB (INS14 - INSTART)
  248. DB (INS15 - INSTART)
  249. DB (INS16 - INSTART)
  250. DB (INS17 - INSTART)
  251. DB (INS18 - INSTART)
  252. DB (INS19 - INSTART)
  253. DB (INS20 - INSTART)
  254. DB (INS21 - INSTART)
  255. DB (INS22 - INSTART)
  256. DB (INS23 - INSTART)
  257. DB (INS24 - INSTART)
  258. DB (INS25 - INSTART)
  259. DB (INS26 - INSTART)
  260. DB (INS27 - INSTART)
  261. DB (INS28 - INSTART)
  262. DB (INS29 - INSTART)
  263. DB (INS30 - INSTART)
  264. DB (INS31 - INSTART)
  265. DB (INS32 - INSTART)
  266. DB (INS33 - INSTART)
  267. DB (INS34 - INSTART)
  268. DB (INS35 - INSTART)
  269. DB (INS36 - INSTART)
  270. DB (INS37 - INSTART)
  271. DB (INS38 - INSTART)
  272. DB (INS39 - INSTART)
  273. DB (INS40 - INSTART)
  274. DB (INS41 - INSTART)
  275. DB (INS42 - INSTART)
  276. DB (INS43 - INSTART)
  277. DB (INS44 - INSTART)
  278. DB (INS45 - INSTART)
  279. DB (INS46 - INSTART)
  280. DB (INS47 - INSTART)
  281. DB (INS48 - INSTART)
  282. DB (INS49 - INSTART)
  283. DB (INS50 - INSTART)
  284. DB (INS51 - INSTART)
  285. DB (INS52 - INSTART)
  286. DB (INS53 - INSTART)
  287. DB (INS54 - INSTART)
  288. DB (INS55 - INSTART)
  289. DB (INS56 - INSTART)
  290. DB (INS57 - INSTART)
  291. DB (INS58 - INSTART)
  292. DB (INS59 - INSTART)
  293. DB (INS60 - INSTART)
  294. DB (INS61 - INSTART)
  295. DB (INS62 - INSTART)
  296. DB (INS63 - INSTART)
  297. DB (INS64 - INSTART)
  298. DB (INS65 - INSTART)
  299. DB (INS66 - INSTART)
  300. DB (INS67 - INSTART)
  301. DB (INS68 - INSTART)
  302. DB (INS69 - INSTART)
  303. DB (INS70 - INSTART)
  304. DB (INS71 - INSTART)
  305. DB (INS72 - INSTART)
  306. DB (INS73 - INSTART)
  307. DB (INS74 - INSTART)
  308. DB (INS75 - INSTART)
  309. DB (INS76 - INSTART)
  310. DB (INS77 - INSTART)
  311. DB (INS78 - INSTART)
  312. DB (INS79 - INSTART)
  313. DB (INS80 - INSTART)
  314. DB (INS81 - INSTART)
  315. DB (INS82 - INSTART)
  316. DB (INS83 - INSTART)
  317. DB (INS84 - INSTART)
  318. DB (INS85 - INSTART)
  319. DB (INS86 - INSTART)
  320. DB (INS87 - INSTART)
  321. DB (INS88 - INSTART)
  322. DB (INS89 - INSTART)
  323. DB (INS90 - INSTART)
  324. DB (INS91 - INSTART)
  325. DB (INS92 - INSTART)
  326. DB (INS93 - INSTART)
  327. DB (INS94 - INSTART)
  328. DB (INS95 - INSTART)
  329. DB (INS96 - INSTART)
  330. DB (INS97 - INSTART)
  331. DB (INS98 - INSTART)
  332. DB (INS99 - INSTART)
  333. DB (INS100 - INSTART)
  334. DB (INS101 - INSTART)
  335. DB (INS102 - INSTART)
  336. DB (INS103 - INSTART)
  337. DB (INS104 - INSTART)
  338. DB (POPI - INSTART)
  339. DB (PUSHI - INSTART)
  340. DB (RETIN - INSTART)
  341. DB (LCALLI - INSTART)
  342. DB (ACALLI - INSTART)
  343. DB (JMPI - INSTART)
  344. ;note: RETI not implemented
  345. TIME_ADDRESS_TABLE_END:
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement