No. The value in
might have been changed by
$t0 (according to convention)
is a register that a subroutine is free to use.
add $t0,$s5,$s3 # calculate an important sum jal somesub # call a subroutine nop # branch delay mul $s4,$t0,$v1 # multiply the sum by the result
Here is an example of a calling convention. This convention is very simple and is not suitable for a serious program. But it illustrates some ideas that will be used later on in more complex conventions. Let us call it the Simple Linkage Convention . You have already seen most of the rules of this convention:
jal(which puts the return address in
$t0 - $t9— The subroutine is free to change these registers.
$s0 - $s7— The subroutine must not change these registers.
$a0 - $a3— These registers contain arguments for the subroutine. The subroutine can change them.
$v0 - $v1— These registers contain values returned from the subroutine.
mainroutine returns control by using the exit service (service 10) of the SPIM exception handler.
Since a subroutine may not call another subroutine
(in this Simple Linkage Convention)
programs will consist of a
that calls any number of subroutines.
But the subroutines do not call other subroutines and
always return directly to
(Thought Question: ) Consider rule number 2. Why must not a subroutine call another subroutine?