rendered paste body#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