编写一个程序来执行两个单精度的乘法 不使用 MIPS 的 IEEE 754 标准浮点数 浮点运算指令。输入数据是从a读取的 文件以二进制格式存储在名为 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
我不知道为什么结果是无穷大。
我不知道为什么结果是无穷大。
$f4
中的值为0x7f000000,即1.7014118346e+38,值得注意的是,这是一个非常大的数字,其指数达到了单精度浮点的极限。
$f5
中的值为0x41160000,即9.375。
程序然后将这两个值相乘,数值上的结果是1.5950735949375e+39,但是这个值溢出了单精度浮点格式,因此被转换为“无穷大”,存储在
$f8
中.
后来通过将
$f10
添加到$f9
来生成$f8
,它将无穷大/溢出从$f8
传播到$f10
,这就是正在打印的内容。
您可以使用良好的浮点计算器观察浮点寄存器中的这些值,例如:https://www.h-schmidt.net/FloatConverter/IEEE754.html