我试图从用户那里读取一个double,然后将它存储在一个临时寄存器中,如下所示:
li $v0, 7 #syscall for reading double = 7
syscall
mov.d $t0, $f0 #t0= number of gallons
我收到错误:
" $ t0":操作数类型不正确
对此使用的正确类型是什么?
答案 0 :(得分:2)
$t0
不是浮点寄存器,因此您无法mov.d
。改为使用其他浮点寄存器之一($f1..$f31
)。由于双精度占用两个相邻的浮点寄存器,因此应移至偶数浮点寄存器之一($f2, $f4, ..., $f30
)。
如果确实希望将$f0
的值放在$t0
中,则必须先将其转换为单精度浮点数然后再使用{ {1}}:
mfc1
请注意,cvt.s.d $f2,$f0 # convert to single-precision (32-bit)
mfc1 $t0,$f2 # copy the single-precision float bit-for-bit to GPR $t0
现在将包含一个浮点数,因此在整数算术运算中它将毫无用处。
也可以将double转换为整数,然后将其移动到GPR:
$t0
因此,如果您最初在cvt.w.d $f2,$f0 # convert to integer by rounding (according to the currently set rounding mode)
mfc1 $t0,$f2 # copy to GPR $t0
中3.14
$f0
,那么3
中的4
或$t0
最终将取决于当前的四舍五入模式。