Stack Animation: Fibonacci Example


MIPS Code

about to execute jal
    ----------------------------------------------------------------------
    main:       ...                     # stuff not shown
    (1004)       addi $a0, $zero, 4      # $a0 = n = 4
    (1008)       jal fib                 # call fib(n); result is in $v0
    (1012)       ...                     # stuff not shown to print & exit
    ----------------------------------------------------------------------
    # Note: As always, $a0 holds 1st parameter: n
    fib:(2000)   slti $t0, $a0, 3        # TEST BASE CASE: t0 = 1 if n < 3
                beq $t0, $zero, ELSE    # goto ELSE if n >= 3
                addi $v0, $zero, 1      # put return value (1) in $v0
                jr $ra                  # return
    ELSE:(2016)  addi $sp, $sp, -12      # PUSH: adjust stack ptr for 3 items
                sw $ra, 0($sp)          # store $ra on stack
                sw $s0, 4($sp)          # store $s0 on stack
                sw $s1, 8($sp)          # store $s1 on stack
                add $s0, $a0, $zero     # save n ($a0) in $s0
    FirstRecCall:
                addi $a0, $s0, -1       # put n-1 in $a0
    (2040)       jal fib                 # recursive call; result will be in $v0
    WeAreBack1: add $s1, $v0, $zero     # save result1 ($v0) in $s1
    SecndRecCall:
                addi $a0, $s0, -2       # put n-2 in $a0
    (2052)       jal fib                 # recursive call; result will be in $v0
    WeAreBack2: add $v0, $s1, $v0       # save result1 + result2 in $v0
    PopFrmStk:  lw $s1, 8($sp)          # POP: retrieve $s1 from stack
                lw $s0, 4($sp)          # retrieve $s0 from stack
                lw $ra, 0($sp)          # retrieve $ra from stack
                addi $sp, $sp, 12       # restore stack pointer
    Return:     jr $ra                  # return
    # Note: As always, $v0 holds result to be returned
    ----------------------------------------------------------------------

Stack

grows down
AddressContents
3000
 
 
 
 
 
 
 
 
 

Diagram

fib(4)

Registers

 
RegContents
$v0
$v1
$a04
$t0
$s012345
$s16789
$sp3000
$fp
$ra
 
 
 
 
 
PC1008


Alyce Brady, Kalamazoo College