So the jist of this assignment is to write a program that will convert and display a Kilometer to Miles conversion table. I'm supposed to use a while loop which displays every whole number from 0 km to 20km. The loop will convert km to miles for every iteration, and it will display the results as a table.
Here is my code:
.data
newLine: .asciiz "\n"
milesNum: .asciiz " --> Miles: "
kiloNum: .asciiz "Kilometers: "
convFac: .float 1.609344
.text
main:
li $t0, 0 # i = 0
while:
# Load values from
memory
l.s $f2, convFac
mtc1 $t0, $f4
# Calculate miles
mul.s $f0, $f4, $f2
# Display label for
kilometers
li $v0, 4
la $a0, kiloNum
syscall
# Display Kilometers
move $a0, $t0
li $v0, 1
syscall
# Display label for
miles
li $v0, 4
la $a0, milesNum
syscall
# Display miles as a
float
li $v0, 2
mov.s $f12, $f0
syscall
# Print new line
li $v0, 4
la $a0, newLine
syscall
# Increment kilometers
addi $t0, $t0, 1
# Make sure we're still in loop bounds
li $t1, 20
bgt $t0, $t1, exit
# Print newline
li $v0, 4
la $a0, newLine
syscall
j while
exit:
li $v0, 10
syscall
# End of program
li $v0, 10
syscall
Instead of giving me the correct answers (i.e: 20 * 1.609344 = 32.18688), it's displaying this:
Kilometers: 0 --> Miles: 0.0
Kilometers: 1 --> Miles: 2.8E-45
Kilometers: 2 --> Miles: 4.2E-45
Kilometers: 3 --> Miles: 7.0E-45
Kilometers: 4 --> Miles: 8.4E-45
Kilometers: 5 --> Miles: 1.1E-44
Kilometers: 6 --> Miles: 1.4E-44
Kilometers: 7 --> Miles: 1.5E-44
Kilometers: 8 --> Miles: 1.8E-44
Kilometers: 9 --> Miles: 2.0E-44
Kilometers: 10 --> Miles: 2.24E-44
Kilometers: 11 --> Miles: 2.5E-44
Kilometers: 12 --> Miles: 2.7E-44
Kilometers: 13 --> Miles: 2.9E-44
Kilometers: 14 --> Miles: 3.2E-44
Kilometers: 15 --> Miles: 3.4E-44
Kilometers: 16 --> Miles: 3.6E-44
Kilometers: 17 --> Miles: 3.8E-44
Kilometers: 18 --> Miles: 4.1E-44
Kilometers: 19 --> Miles: 4.3E-44
Kilometers: 20 --> Miles: 4.5E-44
I know it's an error with my code, but I'm stuck.