MARS MIPS 两个单精度 IEEE 754 标准浮点数的乘法

问题描述 投票:0回答:1

编写一个程序来执行两个单精度的乘法 不使用 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                

我不知道为什么结果是无穷大。

assembly mips mips32 mars-simulator
1个回答
0
投票

我不知道为什么结果是无穷大。

$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

© www.soinside.com 2019 - 2024. All rights reserved.