这个程序MIPS的输出有问题(双)

时间:2017-12-22 18:38:35

标签: mips mips32 mars-simulator mips64

我正在用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 个答案:

答案 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