Yes. The S registers are popped in the reverse of the order in which they were pushed.
Here is the body filled in:
## maxExp -- compute the maximum of three expressions ## ## Input: ## $a0 -- a signed integer, x ## $a1 -- a signed integer, y ## ## Returns: ## $v0 -- the maximum of x*x, x*y, or 5*y ## ## Registers: ## $s0 -- x*x ## $s1 -- x*y ## $s2 -- 5*y .text .globl maxExp maxExp: # prolog # body mul $s0,$a0,$a0 # x*x mul $s1,$a0,$a1 # x*y li $t0,5 mul $s2,$t0,$a1 # 5*y # subroutine maxInt call move $a0,$s0 # compute max of x*x move $a1,$s1 # and x*y jal maxInt # max returned in $v0 nop # subroutine maxInt return # subroutine maxInt call move $a0,$v0 # compute max of move $a1,$s2 # current max, and 5*y jal maxInt # total max will be in $v0 nop # subroutine maxInt return # epilog
After the return from the second call to maxInt, the
maximum of the three expressions will be in $v0
.
Is this where we want it?