MIPS-3个浮点数的除法

MIPS-3个浮点数的除法,mips,floating-point-precision,Mips,Floating Point Precision,我的第一个MIPS任务之一。 我试了很多,也读了一些教程,但是我找不到失败的地方。 (3.0+3.0+3.0)‘div’3.0给出的结果为0.0 希望你能帮我找到我的错误 .text .globl main main: ##Enter first float: la $a0,prompt1 li $v0,4 syscall li

我的第一个MIPS任务之一。 我试了很多,也读了一些教程,但是我找不到失败的地方。 (3.0+3.0+3.0)‘div’3.0给出的结果为0.0 希望你能帮我找到我的错误

.text         
.globl  main

main:       
    ##Enter first float:
    la    $a0,prompt1       
    li    $v0,4             
    syscall                 
    li    $v0,6             
    syscall
    move    $s0,$v0
    mtc1    $s0,$f0

    ##Enter second float:   
    la    $a0,prompt1       
    li    $v0,4             
    syscall                 
    li    $v0,6             
    syscall
    move    $s1,$v0
    mtc1    $s1,$f1

    ##Enter third float:      
    la    $a0,prompt1       
    li    $v0,4             
    syscall                 
    li    $v0,6             
    syscall
    move    $s2,$v0
    mtc1    $s2,$f2 

    ##Calculate"((f0+f1+f2) div by 3.0)"
    l.s     $f3, fp1
    add.s   $f0, $f0, $f1
    add.s   $f0, $f0, $f2
    div.s   $f0, $f0, $f3
    mfc1 $s0, $f0 

    la    $a0,prompt2       
    li    $v0,4             
    syscall 

    move  $a0, $s0
    li    $v0,2
    syscall

.data
fp1: .float 3.0
prompt1: .asciiz "Enter a float: "
prompt2: .asciiz "The result is: "

谢谢大家!

您使用的系统调用不正确

syscall 6(
read float
)的描述是:“结果
$f0
包含浮点读取”

因此,在每次系统调用6之后,您可以执行
mov.s$fn,$f0
(其中
$fn
$f1
$f2
,等等)将已读取的浮点复制到其他浮点寄存器之一


syscall 2(
print float
)的描述是:“参数
$f12
=要打印的浮点值”。
因此,要打印分区的结果,您可以简单地将结果放置在
$f12
(即
div.s$f12、$f0、$f3
)中,然后使用syscall 2。

非常感谢! 我一直在努力,在你的提示下,我终于明白了。 以下是解决方案(如果任何人有类似问题)

    .text         
.globl  main

main:       
    ##Enter first float:
        la    $a0,prompt1       
        li    $v0,4             
        syscall                 
        li    $v0,6             
        syscall
    mov.s   $f1, $f0

    ##Enter second float:   
        la    $a0,prompt1       
        li    $v0,4             
        syscall                 
        li    $v0,6             
        syscall
    mov.s   $f2, $f0

    ##Enter third float:      
        la    $a0,prompt1       
        li    $v0,4             
        syscall                 
        li    $v0,6             
        syscall
    mov.s   $f3, $f0

    ##Calculate"((f0+f1+f2) div by 3.0)"
        l.s     $f4, fp1
        add.s   $f1, $f1, $f2
        add.s   $f1, $f1, $f3
        div.s   $f12, $f1, $f4

        la    $a0,prompt2       
        li    $v0,4             
        syscall 

        mfc1    $a0, $f12
        la      $v0,2
        syscall

.data
fp1: .float 3.0
prompt1: .asciiz "Enter a float: "
prompt2: .asciiz "The result is: "