我正在编辑此程序,因此它将以双点精度格式输出值。有人告诉我用两个词来定义双精度格式的数字。但是,这不起作用。我得到的结果是0.0、0.0、0.0、0.0。我究竟做错了什么?任何帮助,将不胜感激!谢谢!
.data
ZERO: .double 0
ONE: .double 1
POSITIVE_MIN_DBL: .word 0x00000000 0x00100000 #2.2250738585072014 E -308
LARGEST: .word 0x000000 0x7f7fffff
POSITIVE_MIN: .word 0x00000000 0x00800000 # -3.4028235E38
POSITIVE_DENOR_MIN: .word 0x00000000 0x00000001 # denormal min, +1.4E-45
NL: .asciiz "\n"
.text
l.d $f0, ZERO
l.d $f2, ONE
div.d $f12, $f0, $f0 # f12 = 0/0 = NaN
jal printFloat
div.d $f12, $f2, $f0 # f12 = 2/0 = +infinity
jal printFloat
l.d $f12, LARGEST
jal printFloat
l.d $f12, POSITIVE_MIN
jal printFloat
l.d $f12, POSITIVE_DENOR_MIN
jal printFloat
j exit
printFloat:
li $v0, 2
syscall
la $a0, NL
li $v0, 4
syscall
jr $ra
exit:
答案 0 :(得分:0)
您使用了错误的系统调用。
系统调用2为print_float
。您需要的是系统调用3(print_double
)。
此外,我不知道您是如何得出这些十六进制值的。无论如何,它们与您的注释中的值不匹配。例如,-3.4028235e38
应该是0xC7EFFFFFE54DAFF8
,而不是0x0080000000000000
(0x0080000000000000
应该是2.8480945388892180e-306
)。