A good answer might be:

I don't know.

Register Use

To answer the question, look at the code for main to determine which registers contain information and can not be altered. Do this for each call to sub, because registers are likely to hold different information at different points.

This is tedious and error prone. Worse, if main is altered, now you have to inspect the registers again, and possibly re-code sub.

One of the goals of subroutines is to create a module that is independent of the rest of the code. We have not achieved that, yet.

Another issue is how data is passed into and out of the subroutine. Often data is in registers, and the results are in registers. Which registers?

By agreement between programmers (not by hardware) registers have been assigned different roles with subroutine linkage:

QUESTION 8:

Is the following code fragment correct?

      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