A good answer might be:

No. The value in $t0 might have been changed by somesub, since $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 some subroutine
      nop                  # branch delay
      mul    $s4,$t0,$v1   # multiply the sum by the result

Simple Linkage

Here is an example of a calling convention. This convention is very simple and is not suitable for any 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. Most of the rules of this convention you have already seen:

  1. A subroutine is called using jal.
  2. A subroutine will NOT call another subroutine.
  3. The subroutine returns to its caller using jr $ra.
  4. Register are used as follows:
    • $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.

Since a subroutine may not call another subroutine, programs will consist of a main routine that calls any number of subroutines. But the subroutines do not call other subroutines and always return directly to main.

QUESTION 9:

(Thought Question: ) Rule number 2 is new. Why must not a subroutine call another subroutine?