0

我正在编辑这个程序,所以它会以双点精度格式打印出值。有人告诉我用两个词来定义双精度格式的数字。但是,这是行不通的。我得到的结果是 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: 
4

1 回答 1

0

您使用了错误的系统调用。

系统调用 2 是print_float. 你想要的是系统调用 3 ( print_double)。


另外,我不知道您是如何得出这些十六进制值的。无论如何,它们与您评论中的值不匹配。例如,-3.4028235e38应该是0xC7EFFFFFE54DAFF8,而不是0x00800000000000000x0080000000000000将是2.8480945388892180e-306)。

于 2018-08-03T08:28:21.397 回答