go to previous page   go to home page   go to next page highlighting

Answer:

Yes. Just be sure to synchronize the pushes and pops so the the correct values go into the correct registers.


Pushing and Popping Registers

Here is a rule:

Here is an example program fragment. Subroutine subB calls subC which uses two S registers.


subB:
         sub    $sp,$sp,4    # push $ra
         sw     $ra,($sp)

         . . . .
         li     $s0,23       # use $s0
  
         jal    subC         # call subC
         nop
 
         add    $s1,$s0,$s5  # $s0 holds 23
         . . . .
         
         lw     $ra,($sp)    # pop return address
         add    $sp,$sp,4
         jr     $ra          # return to caller
         nop

# subC might use $s0 and $s1  
#       
subC:   
        # save return address
         sub    $sp,$sp,4    # push $ra
         sw     $ra,($sp)

         # save registers on the stack
		 
         sub    $sp,$sp,4    # push $s0
         sw     $s0,($sp)
         sub    $sp,$sp,4    # push $s1
         sw     $s1,($sp)

         . . . . # statements using $s0 and $s1

         lw     ,($sp)   # pop 
         
		 # restore the saved registers
         add    $sp,$sp,4
         
         lw     ,($sp)   # pop 
         
         add    $sp,$sp,4

         lw     $ra,($sp)    # pop return address
         add    $sp,$sp,4
         jr     $ra          # return to caller
         nop


QUESTION 5:

Fill in the blanks so that subB sees its S registers when it regains control.


go to previous page   go to home page   go to next page