# C code: # main() { # print(5,1,2,3,4,5); # } # # void print(count, a[1] a[2], ... a[count]) { # for (int i=1,i<=count,i++) # print a[i] # } # .data nl: .asciiz "\n" .text main: # BEGIN main prologue subu $sp,$sp, 24 # Allocate stack frame sw $fp, 0($sp) # Save $fp in frame addu $fp, $sp, 24 # Set up $fp sw $ra, -20($fp) # Save $ra # END main prologue # BEGIN CALL print(5,1,2,3,4,5); li $t0, 44 sw $t0, -12($sp) # push z2 on stack li $t0, 55 sw $t0, -8($sp) # push z2 on stack li $t0, 66 sw $t0, -4($sp) # push y2 on stack li $a3, 33 # pass x2 in a3 li $a2, 22 # pass z1 in a2 li $a1, 11 # pass y1 in a1 li $a0, 6 # pass x1 in a0 jal print # BEGIN main epilogue lw $ra, -20($fp) # Restore $ra lw $fp, -24($fp) # Restore $fp addu $sp, $sp, 24 # Pop stack frame jr $ra # END main epilogue printIt: # BEGIN prologue subu $sp,$sp, 24 # Allocate stack frame sw $fp, 0($sp) # Save $fp in frame addu $fp, $sp, 24 # Set up $fp sw $ra, -20($fp) # Save $ra # END prologue li $v0, 1 syscall li $v0, 4 la $a0, nl syscall # BEGIN epilogue lw $ra, -20($fp) # Restore $ra lw $fp, -24($fp) # Restore $fp addu $sp, $sp, 24 # Pop stack frame jr $ra # END epilogue print: # BEGIN prologue subu $t0,$a0,4 mul $t0,$t0,4 addu $t0,$t0,24 subu $sp,$sp, $t0 # Push stack frame sw $fp, 0($sp) # Save $fp in frame addu $fp, $sp, $t0 # Set up $fp sw $ra, 4($sp) # Save $ra sw $a0,8($sp) sw $a1,12($sp) sw $a2,16($sp) sw $a3,20($sp) # END prologue la $s0,12($sp) # argument pointer li $s1,1 # argument index move $s2,$a0 # argument count loop: bgt $s1,$s2,done lw $a0,($s0) jal printIt addu $s1,$s1,1 addu $s0,$s0,4 b loop done: # BEGIN epilogue lw $a0,8($sp) subu $t0,$a0,4 mul $t0,$t0,4 addu $t0,$t0,24 lw $ra, 4($sp) # restore $ra lw $fp, 0($sp) # restore $fp addu $sp, $sp, $t0 # pop stack frame jr $ra # END epilogue