编写一个程序来执行两个单精度IEEE 754标准浮点数的乘法,而不使用MIPS浮点算术指令。输入数据从以二进制格式存储在磁盘FLOAT2.BIN上的文件中读取(2个值x 4字节= 8字节)。
.data
num1: .float 2.5
num2: .float 3.75
.text
.globl main
main:
lwc1 $f0, num1
lwc1 $f1, num2
li $t0, 0x80000000
mtc1 $t0, $f2
lui $t0, 0x3f80
mtc1 $t0, $f3
sll $t0, $t0, 1
mtc1 $t0, $f4
mul.s $f5, $f0, $f1
mul.s $f6, $f2, $f5
mul.s $f7, $f3, $f5
mul.s $f8, $f4, $f5
add.s $f9, $f6, $f7
add.s $f10, $f9, $f8
mov.s $f12, $f10
li $v0, 2
mov.s $f12, $f10
syscall
li $v0, 10
syscall
字符串
我不知道为什么结果是无穷大。
1条答案
按热度按时间q5iwbnjs1#
我不知道为什么结果是无穷大。
$f4
中的值为0x 7 f000000,即 1.7014118346e+38,值得注意的是,这是一个非常大的数字,其指数达到了单精度浮点数的极限。$f5
中的值为0x 41160000,即 9.375。然后,程序将这两个值相乘,
字符串
数值上的结果是 1.5950735949375e+39,然而,这个值溢出了单精度浮点格式,因此被转换为“无穷大”,存储在
$f8
中。稍后,通过将
$f9
添加到$f8
来生成$f10
,型
这会将infinity/overflow从
$f8
传播到$f10
,这就是要打印的内容。你可以使用一个好的浮点计算器来观察浮点寄存器中的这些值,比如:https://www.h-schmidt.net/FloatConverter/IEEE754.html