Year 2 compilers coureswork

recursion.asm 1.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. .globl __start
  2. __start:
  3. li $a0, 68
  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, 68
  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. or $5, $0, $16
  31. li $8, 1
  32. or $6, $0, $8
  33. jal inner_fact
  34. lw $fp, 4($fp)
  35. lw $ra, 64($fp)
  36. lw $16, 8($fp)
  37. or $9, $0, $v1
  38. or $v1, $0, $9
  39. jr $31
  40. inner_fact:
  41. li $a0, 68
  42. li $v0, 9
  43. syscall
  44. sw $fp, 4($v0)
  45. sw $16, 8($fp)
  46. sw $17, 12($fp)
  47. sw $18, 16($fp)
  48. sw $19, 20($fp)
  49. sw $20, 24($fp)
  50. sw $21, 28($fp)
  51. sw $22, 32($fp)
  52. sw $23, 36($fp)
  53. or $fp, $0, $v0
  54. la $t0, inner_fact
  55. sw $t0, 0($fp)
  56. sw $ra, 64($fp)
  57. or $16, $0, $5
  58. or $17, $0, $6
  59. bne $16, $0, L0
  60. or $v1, $0, $17
  61. jr $31
  62. L0:
  63. li $11, 1
  64. sub $10, $16, $11
  65. mult $17, $16
  66. mflo $12
  67. or $5, $0, $10
  68. or $6, $0, $12
  69. jal inner_fact
  70. lw $fp, 4($fp)
  71. lw $ra, 64($fp)
  72. lw $16, 8($fp)
  73. lw $17, 12($fp)
  74. or $13, $0, $v1
  75. or $v1, $0, $13
  76. jr $31
  77. main:
  78. li $a0, 68
  79. li $v0, 9
  80. syscall
  81. sw $fp, 4($v0)
  82. or $fp, $0, $v0
  83. la $t0, main
  84. sw $t0, 0($fp)
  85. sw $ra, 64($fp)
  86. li $14, 3
  87. or $5, $0, $14
  88. jal fact
  89. lw $fp, 4($fp)
  90. lw $ra, 64($fp)
  91. or $15, $0, $v1
  92. or $16, $0, $15
  93. li $24, 5
  94. or $5, $0, $24
  95. jal fact
  96. lw $fp, 4($fp)
  97. lw $ra, 64($fp)
  98. lw $16, 8($fp)
  99. or $25, $0, $v1
  100. or $17, $0, $25
  101. li $8, 7
  102. or $5, $0, $8
  103. jal fact
  104. lw $fp, 4($fp)
  105. lw $ra, 64($fp)
  106. lw $16, 8($fp)
  107. lw $17, 12($fp)
  108. or $9, $0, $v1
  109. or $18, $0, $9
  110. add $10, $16, $17
  111. add $11, $10, $18
  112. or $v1, $0, $11
  113. jr $31
  114. done:
  115. or $a0, $v1, $0
  116. ori $v0, $0, 1
  117. syscall
  118. ori $a0, $0, 0xA
  119. ori $v0, $0, 0xB
  120. syscall
  121. ori $v0, $0, 10
  122. syscall