0

我正在尝试制作一个简单的程序,用于使用 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) 这样的通用寄存器而不是浮点寄存器来添加两个简单的整数时,它可以完美地工作。

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

4

2 回答 2

1

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

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

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

于 2015-03-18T05:38:34.357 回答
0

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

  • 您不能这样做move $f1,$v0,您必须使用mfc1(move from coprocessor 1) 和mtc1(move to coprocessor 1) 指令将数据从/移到浮点寄存器。

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

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

于 2015-03-19T11:04:34.923 回答