在mips程序集中有指令(addi)将整数值放入寄存器,我的问题是:
addi $t1,$zero,8.9 #MIPS ERROR
如果我想将一个double值放入MIPS的寄存器中,我必须使用哪个指令?
答案 0 :(得分:4)
加载浮点即时的最简单方法是从内存中加载它们。
在数据部分中,您可以定义浮点常数,例如
.data
doubleValue: .double 123.456
floatValue: .float 123.456
然后使用pseudoinstructions l.s
(用于浮点数)和l.d
(用于双精度)将它们加载到浮点寄存器上。例如
.text
l.s $f1, floatValue # Loads constant 123.456 onto $f1
l.d $f2, doubleValue # Loads constant 123.456 onto $f2-$f3
或者,您可以将编码浮点数的immediates加载到通用寄存器中,然后使用mtc1
/ mtc1.d
将它们移动到浮点寄存器。在你必须编码浮点常数的意义上,这很棘手。
例如,假设您要将123.456加载到浮点寄存器上,您可以这样做:
li $t1, 0x42f6e979 # 0x42f6e979 is the encoding for 123.456 single precision float
mtc1 $t1, $f1 # move that float to $f1
如果您要将123.456加载到双精度数上,则会发出:
li $t2, 0x1a9fbe77 # 0x405edd2f1a9fbe77 is the encoding for 123.456 double
li $t3, 0x405edd2f
mtc1.d $t2, $f2 # move that double to $f2-$f3
答案 1 :(得分:0)
它非常类似于编写操作数的搁浅方式。 第一个区别是应该使用$ f(操作数)而不是$ t(操作数)。
值不能作为立即值加载,必须在.data
部分声明。
您使用的浮点寄存器应为偶数。
然后,当您加载浮点值时,操作码应为l.s
。
应使用add.d
命令,因为这些是双值
例如添加10和2.5
.data
float1 : .float 2.5 # declaring the floating values
float2 : .float 10.0 # declaring the floating values
.text
main :
l.s $f0 , float1 # loading the floating values to regester
l.s $f2 , float2 # loading the floating values to regester
add.d $f4 , $f0 , $f2