0

我想在 spim 中编写一个小程序,计算圆的周长并从用户那里读取半径值......这是代码

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

mul.s $f8, $f2, $f6

s0 是在 .data 部分中从用户 p 浮点变量中输入的半径值

执行程序后,我在寄存器 f2、f6、f8 中有这些值(当 s0=3 时):

FP2 = 4059999a
FP6 = 00000003
FP8 = 0000000a

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

4

1 回答 1

0

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

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

于 2012-10-16T13:58:49.687 回答