如何在MIPS中使用浮点寄存器

时间:2015-03-17 18:15:15

标签: mips pcspim

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

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

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

错误&#34;加载文件时发生错误&#34;不是运行时错误,而是汇编程序错误。特别是,由于存在多个问题,您的源代码将无法汇编:

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

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

如果汇编成功,add.d $fp4,$fp2,$fp0将尝试添加浮点寄存器f0f2,但您已将提供的整数加载到f1和{{} 1}}。