Guest User

Untitled

a guest
Jan 18th, 2019
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.89 KB | None | 0 0
  1. .data
  2. n: .word 8
  3.  
  4. .text
  5. main:
  6. la t0, n
  7. lw a0, 0(t0)
  8. jal ra, factorial
  9.  
  10. addi a1, a0, 0
  11. addi a0, x0, 1
  12. ecall # Print result
  13.  
  14. addi a0, x0, 10
  15. ecall # Exit
  16.  
  17. factorial:
  18. # Save s0-s2 and the return address
  19. addi sp, sp -16
  20. sw ra, 12(sp)
  21. sw s2, 8(sp)
  22. sw s1, 4(sp)
  23. sw s0, 0(sp)
  24.  
  25. # if x == 0: goto base_case
  26. beq a0, x0, base_case
  27.  
  28. # Save a0 and calculate (a0 - 1)
  29. mv s0, a0
  30. addi s1, s0, -1
  31. mv a0, s1
  32.  
  33. # s1 = factorial(s1 - 1)
  34. jal ra, factorial
  35. mv s1, a0
  36.  
  37. # calculate (s1 * s0) (or, (x * factorial(x - 1))
  38. mul s2, s1, s0
  39. mv a0, s2
  40.  
  41. # jump to epilogue
  42. j fact_ret
  43.  
  44. base_case:
  45. # return value is 1 if x == 0
  46. li a0, 1
  47. j fact_ret
  48.  
  49. fact_ret:
  50. # restore the stack to how it was when we got it
  51. lw s0, 0(sp)
  52. lw s1, 4(sp)
  53. lw s2, 8(sp)
  54. lw ra, 12(sp)
  55. addi sp, sp, 16
  56.  
  57. # return
  58. jr ra
Add Comment
Please, Sign In to add comment