Year 2 compilers coureswork

recursion.asm 2.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  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. fact:
  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, fact
  27. sw $t0, 0($fp)
  28. sw $ra, 64($fp)
  29. or $16, $0, $5
  30. li $a0, 72
  31. li $v0, 9
  32. syscall
  33. or $17, $v0, $0
  34. la $v0, inner_fact
  35. sw $v0, 0($17)
  36. sw $fp, 68($17)
  37. or $5, $0, $16
  38. li $8, 1
  39. or $6, $0, $8
  40. lw $gp, 0($17)
  41. or $k1, $0, $17
  42. jalr $gp
  43. lw $fp, 4($fp)
  44. lw $ra, 64($fp)
  45. lw $16, 8($fp)
  46. lw $17, 12($fp)
  47. or $9, $0, $v1
  48. sw $16, 8($fp)
  49. sw $17, 12($fp)
  50. sw $18, 16($fp)
  51. sw $19, 20($fp)
  52. sw $20, 24($fp)
  53. sw $21, 28($fp)
  54. sw $22, 32($fp)
  55. sw $23, 36($fp)
  56. or $v1, $0, $9
  57. jr $31
  58. inner_fact:
  59. li $a0, 72
  60. li $v0, 9
  61. syscall
  62. sw $k1, 68($v0)
  63. sw $fp, 4($v0)
  64. sw $16, 8($fp)
  65. sw $17, 12($fp)
  66. sw $18, 16($fp)
  67. sw $19, 20($fp)
  68. sw $20, 24($fp)
  69. sw $21, 28($fp)
  70. sw $22, 32($fp)
  71. sw $23, 36($fp)
  72. or $fp, $0, $v0
  73. la $t0, inner_fact
  74. sw $t0, 0($fp)
  75. sw $ra, 64($fp)
  76. or $16, $0, $5
  77. or $17, $0, $6
  78. bne $16, $0, L0
  79. sw $16, 8($fp)
  80. sw $17, 12($fp)
  81. sw $18, 16($fp)
  82. sw $19, 20($fp)
  83. sw $20, 24($fp)
  84. sw $21, 28($fp)
  85. sw $22, 32($fp)
  86. sw $23, 36($fp)
  87. or $v1, $0, $17
  88. jr $31
  89. L0:
  90. li $11, 1
  91. sub $10, $16, $11
  92. mult $17, $16
  93. mflo $12
  94. or $5, $0, $10
  95. or $6, $0, $12
  96. or $k0, $fp, $0
  97. lw $fp, 68($fp)
  98. lw $fp, 68($fp)
  99. lw $14, 12($fp)
  100. or $fp, $k0, $0
  101. lw $gp, 0($14)
  102. or $k1, $0, $14
  103. jalr $gp
  104. lw $fp, 4($fp)
  105. lw $ra, 64($fp)
  106. lw $16, 8($fp)
  107. lw $17, 12($fp)
  108. or $13, $0, $v1
  109. sw $16, 8($fp)
  110. sw $17, 12($fp)
  111. sw $18, 16($fp)
  112. sw $19, 20($fp)
  113. sw $20, 24($fp)
  114. sw $21, 28($fp)
  115. sw $22, 32($fp)
  116. sw $23, 36($fp)
  117. or $v1, $0, $13
  118. jr $31
  119. main:
  120. li $a0, 72
  121. li $v0, 9
  122. syscall
  123. sw $fp, 4($v0)
  124. or $fp, $0, $v0
  125. la $t0, main
  126. sw $t0, 0($fp)
  127. sw $ra, 64($fp)
  128. li $15, 3
  129. or $5, $0, $15
  130. jal fact
  131. lw $fp, 4($fp)
  132. lw $ra, 64($fp)
  133. or $24, $0, $v1
  134. or $16, $0, $24
  135. li $25, 5
  136. or $5, $0, $25
  137. jal fact
  138. lw $fp, 4($fp)
  139. lw $ra, 64($fp)
  140. lw $16, 8($fp)
  141. or $8, $0, $v1
  142. or $17, $0, $8
  143. li $9, 7
  144. or $5, $0, $9
  145. jal fact
  146. lw $fp, 4($fp)
  147. lw $ra, 64($fp)
  148. lw $16, 8($fp)
  149. lw $17, 12($fp)
  150. or $10, $0, $v1
  151. or $18, $0, $10
  152. add $11, $16, $17
  153. add $12, $11, $18
  154. sw $16, 8($fp)
  155. sw $17, 12($fp)
  156. sw $18, 16($fp)
  157. sw $19, 20($fp)
  158. sw $20, 24($fp)
  159. sw $21, 28($fp)
  160. sw $22, 32($fp)
  161. sw $23, 36($fp)
  162. or $v1, $0, $12
  163. jr $31
  164. done:
  165. or $a0, $v1, $0
  166. ori $v0, $0, 1
  167. syscall
  168. ori $a0, $0, 0xA
  169. ori $v0, $0, 0xB
  170. syscall
  171. ori $v0, $0, 10
  172. syscall