我正在尝试创建一个简单的程序,使用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
)而不是浮点寄存器来添加两个简单的整数时,它可以很好地工作。
如何使用浮点寄存器添加两个浮点数?
答案 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
,而是f0
到f31
。如果您想使用双精度,您必须在加载后转换(例如)cvt.d.w $f0, $f2
如果汇编成功,add.d $fp4,$fp2,$fp0
将尝试添加浮点寄存器f0
和f2
,但您已将提供的整数加载到f1
和{{} 1}}。