使用浮点指令以十进制格式获取结果

时间:2011-06-29 04:35:08

标签: assembly mips

嗨我正在用MIPS编写一个小程序,它在9之间除以2并显示结果。这是代码

li $t1, 2
li $t2, 9
li $v0, 2
div $t0,$t2,$t1
move $a0,$t0
syscall

(这不是完整的代码,只是处理部门的部分)

所以,2/9是0.2222222222222222

但是当我运行它时我只得到0.0

我如何显示真实结果(0.2222222222222222)?

我曾经说过我使用整数而不是浮点数,我必须使用浮点指令来获得十进制结果。我应该查看div.x指令,但div.x不是一个可识别的运算符。

所以,我几乎是空白。我不明白该怎么做。

有人可以发布代码来显示浮点结果吗?

提前致谢。

4 个答案:

答案 0 :(得分:6)

好的,经过长时间的尝试和错误,正确的方法来打印真实的结果是:

使用伪li.s设置2个浮点寄存器(感谢Paul R指向正确的方向)

li.s $f1, 2.0
li.s $f2, 9.0

显然,准备打印浮标

li $v0, 2

在师而不是div $t0,$t2,$t1我应该使用

div.s $f12,$f1,$f2

而不是move $a0,$t0我应该

syscall

没有必要移动,div.s立即打印出结果,因此没有必要将$ f12的内容移动到$ a0来打印其内容。

真正的耻辱是火星不会伪造伪李。我不得不在PCSPIM上尝试这个...

最终代码是

.globl main
.text
main:
li.s $f1, 2.0
li.s $f2, 9.0
li $v0, 2
div.s $f12,$f1,$f2
syscall
li $v0, 10
syscall

当你运行它时,你会得到0.22222222,这是将2除以9的真实结果。

答案 1 :(得分:4)

这是整数除法指令,因此2 / 9 = 0是正确的结果。尝试例如27 / 9你应该得到3的结果。

答案 2 :(得分:0)

你正在进行整数除法。使用浮点指令以十进制格式获取结果。查看div.x指令。

答案 3 :(得分:0)

在不知道完整目标的情况下,使用方便的整数快捷方式也许就足够了:将20亿除以9并用人工插入的小数点显示。在C中,这就像

printf ("0.%d", 2000000000 / 9);