MIPS - 3个花车的分部

时间:2014-06-28 10:35:53

标签: 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    $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: "

谢谢!

2 个答案:

答案 0 :(得分:1)

您未正确使用系统调用。

系统调用6(read float)的说明:" 结果 $f0包含浮动阅读"

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


系统调用2(print float)的说明如下:&#34; 参数 $f12 =浮动打印&#34; 。<登记/> 因此,要打印除法的结果,您只需将结果放在$f12(即div.s $f12, $f0, $f3)中,然后使用系统调用2.

答案 1 :(得分:-1)

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

    .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: "