#Floating Point calculator Elmer Lin .data vals: .float 0.0, 0.00 str1: .asciiz "\n Enter first floating point number: " str2: .asciiz "Enter operation: " str3: .asciiz "Enter value: " str4: .asciiz "Result is: " adds: .asciiz "add" subs: .asciiz "sub" eqs: .asciiz "eq" .text .globl main main: la $10, vals #Loads $10 with data address for vals lwc1 $f10, 0($10) #Loads $f10 with value 0.0 addi $v0, $0, 4 #System call print_string la $a0, str1 #load string into address $a0 syscall #print string addi $v0, $0, 6; #System call read_float syscall #Read float into $v0 add.s $f1, $f10, $f0; #Add to floating point total read_op: la $4, adds la $5, subs la $6, eqs lw $7, 0($4) #Load '+' into $7 lw $8, 0($5) #Load '-' into $8 lw $9, 0($6) #Load '=' into $9 addi $v0, $0, 4 #System call print_string2 la $a0, str2 #load string2 into address $a0 syscall #print string2 addi $v0, $0, 8 #System call read_string syscall #Read char into $v0 beq $v0, $7, add_op #Branch to add_op if $v0 == $7 beq $v0, $8, sub_op #Branch to sub_op if $v0 == $8 beq $v0, $9, output_op #Branch to output_op if $v0 == $9 add_op: addi $v0, $0, 4 #System call print_string3 la $a0, str3 #load string3 into address $a0 syscall #print string addi $v0, $0, 6 #System call read_float syscall #Read float into $v0 add.s $f1, $f1, $f0 #Load new result into total bgez $0, read_op #Branch to read_op sub_op: addi $v0, $0, 4 #System call print_string3 la $a0, str3 #load string3 into address $a0 syscall #print string addi $v0, $0, 6 #System call read_float syscall #Read float into $v0 sub.s $f2, $f1, $f0 #Subtract new float from old float and store in $f2 add.s $f1, $f10, $f2 #Add 0 to +/- float and store in $f1 bgez $0, read_op #Branch to read_op output_op: addi $v0, $0, 4 #System call print_string la $a0, str4 #Load string4 into address $a0 syscall #Print String4 addi $v0, $0, 2 #System call print_float add.s $f12, $f10, $f1 #Print result. syscall #Call system service jr $ra