# C code: # main() { # print_int(distance(10,11,12,13,14,15)); # } # # int distance(x1,y1,z1,x2,y2,z2) # int x1,y1,z1,x2,y2,z2;{ # int xdiff, ydiff, zdiff, dist; # xdiff = x2-x1; # ydiff = y2-y1; # zdiff = z2-z1; # dist = sqrt(xdiff*xdiff + ydiff*ydiff + zdiff*zdiff); # return dist; # } # 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 distance(10,11,12,13,14,15) li $t0, 15 sw $t0, -4($sp) # push z2 on stack li $t0, 14 sw $t0, -8($sp) # push y2 on stack li $a3, 13 # pass x2 in a3 li $a2, 12 # pass z1 in a2 li $a1, 11 # pass y1 in a1 li $a0, 10 # pass x1 in a0 jal distance # END CALL distance(10,11,12,13,14,15) li $v0, 1 # print_int syscall # 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 distance: # BEGIN distance prologue subu $sp,$sp, 48 # Push stack frame sw $fp, 16($sp) # Save $fp in frame addu $fp, $sp, 48 # Set up $fp sw $ra, -28($fp) # Save $ra # END main prologue sub $t0, $a3, $a0 # xdiff = x2-x1 sw $t0, -44($fp) # store xdiff lw $t1, -8($fp) # load y2 sub $t0, $t1, $a1 # ydiff = y2-y1 sw $t0, -40($fp) # store ydiff lw $t1, -4($fp) # load z2 sub $t0, $t1,$a2 # zdiff = z2-z1 sw $t0, -36($fp) # store zdiff lw $t0, -44($fp) # load xdiff mul $t1, $t0, $t0 # square it lw $t0, -40($fp) # load ydiff mul $t0, $t0, $t0 # square it addu $t1, $t1, $t0 # add to sum lw $t0, -36($fp) # load zdiff mul $t0, $t0, $t0 # square it addu $t1, $t1, $t0 # add to sum # BEGIN call sqrt() move $a0, $t1 # pass sum arg jal sqrt # END call sqrt() # BEGIN distance epilogue lw $ra, -28($fp) # restore $ra lw $fp, -32($fp) # restore $fp addu $sp, $sp, 48 # pop stack frame jr $ra # END distance epilogue sqrt: move $v0,$a0 jr $ra