Advertisement
Guest User

Untitled

a guest
Oct 9th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .text
  2.  
  3. main:
  4.     li      s1, 2
  5.     li      s2, 1
  6.     li      s3, 11
  7.  
  8. loop:
  9.     mv      a2, s2
  10.     call    fib
  11.  
  12.     mv      a1, a0   # move return value for printing
  13.     li      a0, 1    # print integer
  14.     ecall
  15.  
  16.     li      a1, ' '
  17.     li      a0, 11   # print char
  18.     ecall
  19.  
  20.     addi    s2, s2, 1
  21.     bge     s2, s3, exit
  22.     j       loop
  23.        
  24. exit:
  25.    # exit the program
  26.     li      a0, 10
  27.     ecall
  28.  
  29. fib:
  30.     bge     a2, s1, fib_recurse
  31.    # base case
  32.     mv      a0, a2
  33.     jr      ra
  34.  
  35. fib_recurse:
  36.     addi    sp, sp, -12  # 12 bytes needed for stack
  37.     sw      ra, 0(sp)    # save return address
  38.    
  39.     sw      a2, 4(sp)    # save n
  40.     addi    a2, a2, -1   # n -= 1
  41.     jal     fib
  42.     lw      a2, 4(sp)    # restore n
  43.     sw      a0, 8(sp)    # save return value from fib(n-1)
  44.    
  45.     addi    a2, a2, -2   # n -= 2
  46.     jal     fib
  47.    
  48.     lw      t3, 8(sp)    #  restore return value from fib(n-1)
  49.     add     a0, a0, t3   # actual return value
  50.    
  51.     lw      ra, 0(sp)    # restore ra
  52.     addi    sp, sp, 12   # tear down the stack
  53.     jr      ra
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement