.text .globl main main: sw $ra, 0($sp) # PUSH subu $sp, $sp, 4 sw $fp, 0($sp) # PUSH subu $sp, $sp, 4 addu $fp, $sp, 8 # point fp to first parameter, no params for main subu $sp, $fp, 8 # size of frame = 4 + 4 + 4*numparams + 4*numlocals # loading a constant float and printing it out .data L1: .float 3.3 .text l.s $f1, L1 # push parameter onto stack s.s $f1, 0($sp) subu $sp, $sp, 4 jal _printfloat # comparing two float values and printing the smaller value .data L2: .float 7.7 .text l.s $f1, L2 .data L3: .float 8.8 .text l.s $f2, L3 c.lt.s $f1, $f2 bc1t L4 # if the comparison is true goto L4, notice bc one t L5: # false body, print second float # push parameter onto stack s.s $f2, 0($sp) subu $sp, $sp, 4 jal _printfloat j L6 L4: # true body, print first float # push parameter onto stack s.s $f1, 0($sp) subu $sp, $sp, 4 jal _printfloat j L6 L6: exit_main: lw $ra, 0($fp) move $t0, $fp lw $fp, -4($fp) move $sp, $t0 jr $ra #li $v0, 2 #syscall # addu $sp, $sp, 4 # lw $ra, 0($fp) # jr $ra ##################### # _printfloat # pass number to print on stack to be found at 0($fp) # at end of call the parameter will already be popped off the stack ##################### .text .globl _printfloat _printfloat: sw $ra, 0($sp) # PUSH subu $sp, $sp, 4 sw $fp, 0($sp) # PUSH subu $sp, $sp, 4 addu $fp, $sp, 12 subu $sp, $fp, 12 # formal param will be put into $f12 for syscall l.s $f12, 0($fp) li $v0, 2 syscall la $a0, newl li $v0, 4 syscall lw $ra, -4($fp) move $t0, $fp lw $fp, -8($fp) move $sp, $t0 j $ra .data .globl newl .align 0 newl: .asciiz "\n"