A good answer might be:

$8 through $15     ==     $t0 through $t7

Registers for Temporary Values

Most assembly programs, like most higher-level language programs, are collections of subroutines. The main program calls upon a sequence of subroutines to accomplish its task. And, of course, subroutines themselves may call other subroutines. (In Java, software is collected into objects, and the equivalent of a subroutine is a method.)

Subroutines use local variables, variables that are not used anywhere but in the subroutine. The temporary registers $t0-$t7,$t8, and $t9 and the saved registers $s0-$s7 are used for local variables (or for the same idea in assembly language).

When you write a program the temporary registers and saved registers are yours to use however you want. But, by software convention, the temporary registers may be changed by any subroutine you call. The saved registers are not changed by a subroutine call. Here is an example:

        ori  $t0,$0,32    # load 32 into a temp register
        ori  $s0,$0,13    # load 13 into a saved register

        jal  subrout      # subroutine call (don't worry about 
                          # the details of this, now).
        sll  $0,$0,0      # delay slot

back:   addu $s0,$s0,$t0  # return from subroutine;
                          # temp  register $t0 may have changed.
                          # saved register $s0 has not changed.

The statement at back is in error. The temporary register $t0 may have been changed by the subroutine subrout.

QUESTION 4:

Could the main program be considered a subroutine?