Что-то не так с выводом этой программы MIPS(двойной)
Я пишу программу на MIPS для преобразования дюймов в сантиметры, но результат всегда оценивается в ноль. Я не знаю, где я сделал не так. Я написал программу ниже. Он компилируется, но не оценивает правильный результат, всегда давая 0.
#declaring some things
.data
inchesText: .asciiz "Enter the number in inches: "
resultText: .asciiz " Centimeters are ==> "
inches: .double 0
inchesToCenti: .double 2.54
centi: .double 0
zero: .word 0
result: .double 0
.text
main:
jal getInches
jal inches_To_Centi
jal finalResult
jal Exit
getInches:
# printing string
la $a0,inchesText
li $v0, 4
syscall
# get inches
li $v0, 7
syscall
s.d $f2, inches
jr $ra
inches_To_Centi:
# loading the formula contstant as it is
l.d $f0, inchesToCenti
#actual inches gained through argument
l.d $f2, inches
# mul both of these to get the centimeters
mul.d $f6, $f0, $f2
s.d $f6, centi
jr $ra
finalResult:
# printing text
la $a0, resultText
li $v0, 4
syscall
# now printing the actual value
l.d $f12, centi
li $v0, 3
syscall
Exit:
li $v0, 10
syscall
1 ответ
Решение
Много ли времени я не занимаюсь сборкой, но думаю, что решение вашей проблемы - это системный вызов, который вы используете для чтения двойного значения.
Системный вызов 7 не сохраняет входное значение в $f2
зарегистрироваться, но в $f0
один.
Измените строку № 26 на
s.d $f0 inches
Чтобы дать немного больше контекста, так как номер строки отсутствует, подпрограмме getInches необходимо исправить:
getInches:
# printing string
la $a0,inchesText
li $v0, 4
syscall
# get inches
li $v0, 7
syscall
s.d $f0, inches
jr $ra