$t0
は浮動小数点レジスタではないため、mov.d
にはできません。代わりに他の浮動小数点レジスタの1つを使用してください($f1..$f31
)。 doubleは隣接する2つの浮動小数点レジスタを占有するため、偶数浮動小数点レジスタの1つに移動する必要があります($f2, $f4, ..., $f30
)。
あなた本当には、あなたが最初の単精度浮動小数点数に変換してからmfc1
を使用する必要があると思います$t0
に$f0
の値を配置したい場合:
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
注$t0
こと浮動小数点数を含んでいるので、整数算術演算では役に立たないでしょう。
それは整数にダブルを変換し、GPRに移動することも可能です:
cvt.w.d $f2,$f0 # convert to integer by rounding (according to the currently set rounding mode)
mfc1 $t0,$f2 # copy to GPR $t0
ですから、もともと$f0
で3.14
を持っていた場合は、3
か4
のいずれかで終わるだろう現在の丸めモードによっては$t0
になります。
ありがとうございますが、今は2倍の値をゼロと比較しようとしていますが、動作しません。私は 'bne $ f2、$ zero、loop'を持っていて、ゼロに等しいなら分岐するべきですが、" $ f2 "というエラーがあります:オペランドのタイプが間違っています。値をゼロとどのように比較できますか? – Joe123
他の浮動小数点レジスタ( '$ f2'と言う)に比較したいdouble値(' 0.0'の場合)をロードした後、浮動小数点比較を行います: 'c.eq.d $ f0 、$ f2'とし、その比較に基づいて 'bc1f'や' bc1t'(例えば 'bc1t f0_is_zero')と分岐することができます。私はあなたがプログラマのボリュームIIのための_MIPS32アーキテクチャをダウンロードすることをお勧めします:MIPS32™命令セット_。 – Michael