【问题标题】:How to use floating point registers in MIPS如何在 MIPS 中使用浮点寄存器
【发布时间】:2015-03-17 18:15:14
【问题描述】:

我正在尝试使用SPIM模拟器制作一个简单的程序,用于在MIPS中添加两个浮点数。代码如下所示:

.data
prompt1: .asciiz "\nPlease Enter first no then hit <enter>:"
prompt2: .asciiz "\nPlease Enter second no then hit <enter>:"
result: .asciiz "\nSum is : "
.text
main:

li  $v0  , 4
la $a0, prompt1
syscall

li $v0, 5
syscall
move $f1,$v0

li  $v0  , 4
la $a0, prompt2
syscall

li $v0, 5
syscall
move $fp2 , $v0

add.d $fp4,$fp2,$fp0

li $v0,4
la $a0,result
syscall

li $v0 , 1 
move $a0 , $fp4
syscall

li $v0 , 10
syscall

当我在 PCSPIM 模拟器中加载程序时,它给了我一条错误消息。但是当我使用像$s0$s1$s2这样的通用寄存器而不是浮点寄存器来添加两个简单的整数时,它可以完美地工作。

如何使用浮点寄存器将两个浮点数相加?

【问题讨论】:

  • 什么错误?请说明。
  • 加载文件时出错

标签: mips pcspim


【解决方案1】:

MIPS 中的浮点寄存器驻留在协处理器 1 中,因为协处理器 1 旨在用于 FPU。 因此,要将数据移动到浮点寄存器,您必须使用 mtc1 指令而不是移动指令。它的意思是“移动到协处理器 1”。

您可以在线参考此文档以获取指令集手册: http://www.cs.cornell.edu/courses/cs3410/2008fa/MIPS_Vol2.pdf

编辑:浮点寄存器的命名也是 $f0-$f31 而不是 $fp0-$fp31。

【讨论】:

  • 我在 XSPIM 上尝试了您的程序并进行了上述更改,加载时没有问题。但是程序本身不能将两个输入数字的小数部分相加。也许它只是一个输入/输出问题,必须调试和检查。
【解决方案2】:

错误“加载文件时发生错误”不是运行时错误,而是汇编程序错误。特别是,您的源将无法组装,因为它有多个问题:

  • 您不能使用 move $f1,$v0,您必须使用 mfc1(从协处理器 1 移动)和 mtc1(从协处理器 1 移动)指令将数据移入/移入浮点寄存器。

  • 浮点寄存器的名称不是fpN,而是f0f31。如果你想使用双精度,你必须在加载后转换,(例如)cvt.d.w $f0, $f2

如果组装成功,add.d $fp4,$fp2,$fp0 将尝试添加浮点寄存器 f0f2,但您已将提供的整数加载到 f1f2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多