See below.
The subroutine uses two variables so there is eight bytes of space on the stack frame for them.
# int mysub( int arg ) # { # int b,c; // b: 0($fp) # // c: 4($fp) # b = arg*2; # c = b + 7; # # return c; # } .text .globl mysub mysub: # prolog sub $sp,$sp,4 # 1. Push return address sw $ra,($sp) sub $sp,$sp,4 # 2. Push caller's frame pointer sw $fp,($sp) sub $sp,$sp,4 # 3. Push register $s1 sw $s1,($sp) sub $fp,$sp,8 # 4. $fp = $sp - space_for_variables move $sp,$fp # 5. $sp = $fp # body of subroutine mul $s1,$a0,2 # arg*2 sw $s1,___(___) # b = " " lw $t0,___(___) # get b add $t0,$t0,___ # b+7 sw $t0,___(___) # c = " " . . . . . jr $ra # return to caller
The program is not very efficient, as written.
There is no need to store and then load b
.
A non-optimizing compiler might do just that, however.