# calling routine jal subroutine #code to execute after call ... subroutine: #code to execute subroutine jr $ra
sw $fp, -4($sp) addi $fp, $sp, -4 addi $sp, $fp -4
addi $sp, $fp, 4 lw $fp, -4($sp)
subroutine:
# save $ra and stack
sw $fp, -4($sp)
addi $fp, $sp, -4
sw $ra, -r($fp)
addi $sp, $fp, -8
...
# restore $ra and stack
lw $ra, -4($fp)
addi $sp, $fp, 4
lw $fp, -4($sp)
jr $ra
subroutine:
# save $ra and stack
sw $fp, -4($sp)
addi $fp, $sp, -4
sw $ra, -4($fp)
# save the $s*
sw $s2, -8($fp)
sw $s3, -12($fp)
addi $sp, $fp, -12
...
# restore the $s*
lw $s2, -8($fp)
lw $s3, -12($fp)
# restore the ra and stack
lw $ra, -4($fp)
addi $sp, $fp, 4
lw $fp, -4($sp)
jr $ra
subroutine:
# save $ra and stack
sw $fp, -4($sp)
addi $fp, $sp, -4
sw $ra, -4($fp)
# save the $s*
sw $s2, -8($fp)
sw $s3, -12($fp)
# int ary[10];
# $fp -16 to $fp -52 is the array
addi $sp, $fp, -52
...
# restore the $s*
lw $s2, -8($fp)
lw $s3, -12($fp)
# restore the ra and stack
lw $ra, -4($fp)
addi $sp, $fp, 4
lw $fp, -4($sp)
jr $ra
sw $t0, -4($sp) sw $t1, -8($sp) addi $sp, $sp, -8 jal foo addi $sp, $sp, 8 lw $t1, -8($sp) lw $to, -4($sp)