Advertisement
Guest User

Untitled

a guest
Dec 9th, 2019
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.98 KB | None | 0 0
  1. // reserved: r13, r14, r15
  2. // r0 = racc
  3. // r13 = rshamt
  4. // r14 = rresult
  5. // r15 = raddr (previous pc + 2 of caller)
  6.  
  7. // r2 = b15..b8
  8. // r1 = b7..0
  9.  
  10. // Initialize data input/output pointers
  11. bringi 10
  12. move r10
  13. bringi 20
  14. move r11
  15.  
  16. FOR:
  17. // Load input
  18. bringi 1 // decrement
  19. move r7
  20. bring r10
  21. sub r7
  22. move r10
  23.  
  24. load r10 // load MSW part
  25. move r2
  26.  
  27. bringi 1 // decrement
  28. move r7
  29. bring r10
  30. sub r7
  31. move r10
  32.  
  33. load r10 // load LSW part
  34. move r1
  35.  
  36. // Calculate output
  37. // Calculate b15' - b8' (index = index - 8)
  38. // Calculate b15' = b10
  39. // rresult = getBit()
  40. bring r2 // getBit(input reg)
  41. move rresult
  42. bringi 2 // getBit(index) 10 - 8 = 2
  43. move r12
  44. branch GET_BIT
  45.  
  46. // append bit to output
  47. bringi 1
  48. move rshamt
  49. bring r4
  50. sl rshamt
  51. move r4
  52.  
  53. bring r4
  54. xor rresult
  55. move r4
  56.  
  57. // Calculate b14' = b9
  58. // rresult = getBit()
  59. bring r2 // getBit(input reg)
  60. move rresult
  61. bringi 1 // getBit(index) 9 - 8 = 1
  62. move r12
  63. branch GET_BIT
  64.  
  65. // append bit to output
  66. bringi 1
  67. move rshamt
  68. bring r4
  69. sl rshamt
  70. move r4
  71.  
  72. bring r4
  73. xor rresult
  74. move r4
  75.  
  76. // Calculate b13' = b8
  77. // rresult = getBit()
  78. bring r2 // getBit(input reg)
  79. move rresult
  80. bringi 0 // getBit(index)
  81. move r12
  82. branch GET_BIT
  83.  
  84. // append bit to output
  85. bringi 1
  86. move rshamt
  87. bring r4
  88. sl rshamt
  89. move r4
  90.  
  91. bring r4
  92. xor rresult
  93. move r4
  94.  
  95. // Calculate b12' = b7
  96. // rresult = getBit()
  97. bring r1 // getBit(input reg)
  98. move rresult
  99. bringi 7 // getBit(index)
  100. move r12
  101. branch GET_BIT
  102.  
  103. // append bit to output
  104. bringi 1
  105. move rshamt
  106. bring r4
  107. sl rshamt
  108. move r4
  109.  
  110. bring r4
  111. xor rresult
  112. move r4
  113.  
  114. // Calculate b11' = b6
  115. // rresult = getBit()
  116. bring r1 // getBit(input reg)
  117. move rresult
  118. bringi 6 // getBit(index)
  119. move r12
  120. branch GET_BIT
  121.  
  122. // append bit to output
  123. bringi 1
  124. move rshamt
  125. bring r4
  126. sl rshamt
  127. move r4
  128.  
  129. bring r4
  130. xor rresult
  131. move r4
  132.  
  133. // Calculate b10' = b5
  134. // rresult = getBit()
  135. bring r1 // getBit(input reg)
  136. move rresult
  137. bringi 5 // getBit(index)
  138. move r12
  139. branch GET_BIT
  140.  
  141. // append bit to output
  142. bringi 1
  143. move rshamt
  144. bring r4
  145. sl rshamt
  146. move r4
  147.  
  148. bring r4
  149. xor rresult
  150. move r4
  151.  
  152. // Calculate b9' = b4
  153. // rresult = getBit()
  154. bring r1 // getBit(input reg)
  155. move rresult
  156. bringi 4 // getBit(index)
  157. move r12
  158. branch GET_BIT
  159.  
  160. // append bit to output
  161. bringi 1
  162. move rshamt
  163. bring r4
  164. sl rshamt
  165. move r4
  166.  
  167. bring r4
  168. xor rresult
  169. move r4
  170.  
  171. // Calculate b8' = p7 = ^(b10:b4)
  172. // r5 = xor bits = 0
  173. bringi 0
  174. move r5
  175.  
  176. // append b10 to r5
  177. // rresult = getBit()
  178. bring r2 // getBit(input reg)
  179. move rresult
  180. bringi 2 // getBit(index)
  181. move r12
  182. branch GET_BIT
  183.  
  184. // append
  185. bringi 1
  186. move rshamt
  187. bring r5
  188. sl rshamt
  189. move r5
  190.  
  191. bring r5
  192. xor rresult
  193. move r5
  194.  
  195. // append b9 to r5
  196. // rresult = getBit()
  197. bring r2 // getBit(input reg)
  198. move rresult
  199. bringi 1 // getBit(index)
  200. move r12
  201. branch GET_BIT
  202.  
  203. // append
  204. bringi 1
  205. move rshamt
  206. bring r5
  207. sl rshamt
  208. move r5
  209.  
  210. bring r5
  211. xor rresult
  212. move r5
  213.  
  214. // append b8 to r5
  215. // rresult = getBit()
  216. bring r2 // getBit(input reg)
  217. move rresult
  218. bringi 0 // getBit(index)
  219. move r12
  220. branch GET_BIT
  221.  
  222. // append
  223. bringi 1
  224. move rshamt
  225. bring r5
  226. sl rshamt
  227. move r5
  228.  
  229. bring r5
  230. xor rresult
  231. move r5
  232.  
  233. // append b7 to r5
  234. // rresult = getBit()
  235. bring r1 // getBit(input reg)
  236. move rresult
  237. bringi 7 // getBit(index)
  238. move r12
  239. branch GET_BIT
  240.  
  241. // append
  242. bringi 1
  243. move rshamt
  244. bring r5
  245. sl rshamt
  246. move r5
  247.  
  248. bring r5
  249. xor rresult
  250. move r5
  251.  
  252. // append b6 to r5
  253. // rresult = getBit()
  254. bring r1 // getBit(input reg)
  255. move rresult
  256. bringi 6 // getBit(index)
  257. move r12
  258. branch GET_BIT
  259.  
  260. // append
  261. bringi 1
  262. move rshamt
  263. bring r5
  264. sl rshamt
  265. move r5
  266.  
  267. bring r5
  268. xor rresult
  269. move r5
  270.  
  271. // append b5 to r5
  272. // rresult = getBit()
  273. bring r2 // getBit(input reg)
  274. move rresult
  275. bringi 5 // getBit(index)
  276. move r12
  277. branch GET_BIT
  278.  
  279. // append
  280. bringi 1
  281. move rshamt
  282. bring r5
  283. sl rshamt
  284. move r5
  285.  
  286. bring r5
  287. xor rresult
  288. move r5
  289.  
  290. // append b4 to r5
  291. // rresult = getBit()
  292. bring r2 // getBit(input reg)
  293. move rresult
  294. bringi 4 // getBit(index)
  295. move r12
  296. branch GET_BIT
  297.  
  298. // append
  299. bringi 1
  300. move rshamt
  301. bring r5
  302. sl rshamt
  303. move r5
  304.  
  305. bring r5
  306. xor rresult
  307. move r5
  308.  
  309. // xor r5's bits among themselves
  310. rxor r5
  311. move rresult
  312.  
  313. // append bit to output
  314. bringi 1
  315. move rshamt
  316. bring r4
  317. sl rshamt
  318. move r4
  319.  
  320. bring r4
  321. xor rresult
  322. move r4
  323.  
  324. // Store output
  325. bringi 1 // decrement
  326. move r7
  327. bring r11
  328. sub r7
  329. move r11
  330.  
  331. bring r4
  332. str r11 // store MSW part
  333.  
  334. bringi 1 // decrement
  335. move r7
  336. bring r11
  337. sub r7
  338. move r11
  339.  
  340. bring r3
  341. str r11 // store LSW part
  342.  
  343. bring r10
  344. bnez FOR
  345.  
  346. END:
  347. halt
  348.  
  349.  
  350. // rresult = input & output, r12 = index
  351. GET_BIT:
  352. // sl rshamt = 7 - index
  353. bringi 7
  354. sub r12 // -= index
  355. move rshamt
  356.  
  357. bring rresult
  358. sl rshamt
  359. move rresult
  360.  
  361. // sr rshamt = 7
  362. bringi 7
  363. move rshamt
  364.  
  365. bring rresult
  366. sr rshamt
  367. move rresult
  368.  
  369. branch raddr
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement