2012-05-03 27 views
0

寄存器欲写在SPIM一个小程序,计算圆的圆周长度,并读取从用户半径的值...这里是代码乘两个浮体在SPIM

sw $s0, p2 
l.s $f6 ,p2 
li.s $f2 ,3.4 

mul.s $f8, $f2, $f6 

S0是输入的形式的用户 p浮点变量在.data段

执行程序我在寄存器F2,F6这些值,F8后半径的值(当S0 = 3):

FP2 = 4059999a 
FP6 = 00000003 
FP8 = 0000000a 

是这样的结果吗?如果这是真的,为什么f8 10中的值不是10.2?

回答

0

0000000a是浮点数的十六进制表示。这并不意味着“10”,这意味着1.4e-44。

问题是,您没有正确地将$ s0中的整数转换为float。考虑$ s0 = 3的情况。你对“sw $ s0,p2”的调用只是简单地将0x00000003位置入内存位置p2。你对l.s“$ f6,p2”的调用把这些相同的位放在$ f6中。但0x00000003并不意味着“3”作为浮点数,而是4.2x10-45。