我正在用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
答案 0 :(得分:1)
我是不是很多时间没有组装,但我认为你的问题的解决方案是关于你用来读取双值的系统调用。
syscall 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