Year 2 compilers coureswork

odd_recursion.asm 2.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. .globl __start
  2. __start:
  3. li $a0, 72
  4. li $v0, 9
  5. syscall
  6. or $fp, $0, $v0
  7. la $t0, main
  8. sw $t0, 0($fp)
  9. sw $0, 4($fp)
  10. jal main
  11. j done
  12. biggerIsOdd:
  13. li $a0, 72
  14. li $v0, 9
  15. syscall
  16. sw $fp, 4($v0)
  17. sw $16, 8($fp)
  18. sw $17, 12($fp)
  19. sw $18, 16($fp)
  20. sw $19, 20($fp)
  21. sw $20, 24($fp)
  22. sw $21, 28($fp)
  23. sw $22, 32($fp)
  24. sw $23, 36($fp)
  25. or $fp, $0, $v0
  26. la $t0, biggerIsOdd
  27. sw $t0, 0($fp)
  28. sw $ra, 64($fp)
  29. or $16, $0, $5
  30. or $17, $0, $6
  31. ble $16, $17, L0
  32. or $5, $0, $16
  33. jal isOdd
  34. lw $fp, 4($fp)
  35. lw $ra, 64($fp)
  36. lw $16, 8($fp)
  37. lw $17, 12($fp)
  38. or $8, $0, $v1
  39. sw $16, 8($fp)
  40. sw $17, 12($fp)
  41. sw $18, 16($fp)
  42. sw $19, 20($fp)
  43. sw $20, 24($fp)
  44. sw $21, 28($fp)
  45. sw $22, 32($fp)
  46. sw $23, 36($fp)
  47. or $v1, $0, $8
  48. jr $31
  49. j L1
  50. L0:
  51. or $5, $0, $17
  52. jal isOdd
  53. lw $fp, 4($fp)
  54. lw $ra, 64($fp)
  55. lw $16, 8($fp)
  56. lw $17, 12($fp)
  57. or $9, $0, $v1
  58. sw $16, 8($fp)
  59. sw $17, 12($fp)
  60. sw $18, 16($fp)
  61. sw $19, 20($fp)
  62. sw $20, 24($fp)
  63. sw $21, 28($fp)
  64. sw $22, 32($fp)
  65. sw $23, 36($fp)
  66. or $v1, $0, $9
  67. jr $31
  68. L1:
  69. isOdd:
  70. li $a0, 72
  71. li $v0, 9
  72. syscall
  73. sw $fp, 4($v0)
  74. sw $16, 8($fp)
  75. sw $17, 12($fp)
  76. sw $18, 16($fp)
  77. sw $19, 20($fp)
  78. sw $20, 24($fp)
  79. sw $21, 28($fp)
  80. sw $22, 32($fp)
  81. sw $23, 36($fp)
  82. or $fp, $0, $v0
  83. la $t0, isOdd
  84. sw $t0, 0($fp)
  85. sw $ra, 64($fp)
  86. or $16, $0, $5
  87. li $10, 1
  88. bne $16, $10, L2
  89. li $11, 1
  90. sw $16, 8($fp)
  91. sw $17, 12($fp)
  92. sw $18, 16($fp)
  93. sw $19, 20($fp)
  94. sw $20, 24($fp)
  95. sw $21, 28($fp)
  96. sw $22, 32($fp)
  97. sw $23, 36($fp)
  98. or $v1, $0, $11
  99. jr $31
  100. j L3
  101. L2:
  102. li $13, 1
  103. sub $12, $16, $13
  104. or $5, $0, $12
  105. jal isOdd
  106. lw $fp, 4($fp)
  107. lw $ra, 64($fp)
  108. lw $16, 8($fp)
  109. or $14, $0, $v1
  110. li $15, 1
  111. bne $14, $15, L4
  112. sw $16, 8($fp)
  113. sw $17, 12($fp)
  114. sw $18, 16($fp)
  115. sw $19, 20($fp)
  116. sw $20, 24($fp)
  117. sw $21, 28($fp)
  118. sw $22, 32($fp)
  119. sw $23, 36($fp)
  120. or $v1, $0, $0
  121. jr $31
  122. j L5
  123. L4:
  124. li $24, 1
  125. sw $16, 8($fp)
  126. sw $17, 12($fp)
  127. sw $18, 16($fp)
  128. sw $19, 20($fp)
  129. sw $20, 24($fp)
  130. sw $21, 28($fp)
  131. sw $22, 32($fp)
  132. sw $23, 36($fp)
  133. or $v1, $0, $24
  134. jr $31
  135. L5:
  136. L3:
  137. main:
  138. li $a0, 72
  139. li $v0, 9
  140. syscall
  141. sw $fp, 4($v0)
  142. or $fp, $0, $v0
  143. la $t0, main
  144. sw $t0, 0($fp)
  145. sw $ra, 64($fp)
  146. li $25, 5
  147. or $16, $0, $25
  148. li $8, 7
  149. or $17, $0, $8
  150. or $5, $0, $16
  151. or $6, $0, $17
  152. jal biggerIsOdd
  153. lw $fp, 4($fp)
  154. lw $ra, 64($fp)
  155. lw $16, 8($fp)
  156. lw $17, 12($fp)
  157. or $9, $0, $v1
  158. li $10, 1
  159. bne $9, $10, L6
  160. li $11, 400
  161. sw $16, 8($fp)
  162. sw $17, 12($fp)
  163. sw $18, 16($fp)
  164. sw $19, 20($fp)
  165. sw $20, 24($fp)
  166. sw $21, 28($fp)
  167. sw $22, 32($fp)
  168. sw $23, 36($fp)
  169. or $v1, $0, $11
  170. jr $31
  171. L6:
  172. li $12, 66
  173. sw $16, 8($fp)
  174. sw $17, 12($fp)
  175. sw $18, 16($fp)
  176. sw $19, 20($fp)
  177. sw $20, 24($fp)
  178. sw $21, 28($fp)
  179. sw $22, 32($fp)
  180. sw $23, 36($fp)
  181. or $v1, $0, $12
  182. jr $31
  183. done:
  184. or $a0, $v1, $0
  185. ori $v0, $0, 1
  186. syscall
  187. ori $a0, $0, 0xA
  188. ori $v0, $0, 0xB
  189. syscall
  190. ori $v0, $0, 10
  191. syscall