MIPS双点

时间:2018-08-03 03:57:44

标签: mips mips32 mips64

我正在编辑此程序,因此它将以双点精度格式输出值。有人告诉我用两个词来定义双精度格式的数字。但是,这不起作用。我得到的结果是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: 

1 个答案:

答案 0 :(得分:0)

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

系统调用2为print_float。您需要的是系统调用3(print_double)。


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