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

pbgvytdp  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(138)

编写一个程序来执行两个单精度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

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

q5iwbnjs

q5iwbnjs1#

我不知道为什么结果是无穷大。
$f4中的值为0x 7 f000000,即 1.7014118346e+38,值得注意的是,这是一个非常大的数字,其指数达到了单精度浮点数的极限。
$f5中的值为0x 41160000,即 9.375。
然后,程序将这两个值相乘,

mul.s $f8, $f4, $f5

字符串
数值上的结果是 1.5950735949375e+39,然而,这个值溢出了单精度浮点格式,因此被转换为“无穷大”,存储在$f8中。
稍后,通过将$f9添加到$f8来生成$f10

add.s $f10, $f9, $f8


这会将infinity/overflow从$f8传播到$f10,这就是要打印的内容。
你可以使用一个好的浮点计算器来观察浮点寄存器中的这些值,比如:https://www.h-schmidt.net/FloatConverter/IEEE754.html

相关问题