#********************************************************************** # CS 232: Comp. Arch. I # Written: 1/5/00, JP Mellor # # This file contains procedure: # -- fib # # It expects one argument n stored in $a0 and return fib(n) # #********************************************************************** .globl fib #********************************************************************** .text # $v0 - return value # $a0 - counter # $t0 - temp # $t1 - fib(n-1) # $t2 - fib(n) fib: mv $v0, $a0 # put n in return value mv $t1, 0 # put fib(0) in fib(n-1) mv $t2, 1 # put fib(1) in fib(n) slt $t3, $a0, 2 # check if n = 0 or 1 bne $t3, $zero, done # if so we're done add $a0, $a0, -1 # decriment counter loop: add $v0, $t1, $t2 # put fib(n+1) into return value mv $t2, $t1 # put the old fib(n) in fib(n-1) mv $v0, $t2 # put the new fib(n) in fib(n) add $a0, $a0, -1 # decriment counter bne $a0, $zero, loop # check if we're done done: jr $ra # return