在MIPS中乘以IEEE-754浮点数

在MIPS中乘以IEEE-754浮点数,mips,Mips,我必须将一个浮点数(IEEE 754格式)乘以2,而不使用浮点指令 我遇到的问题是在乘法后修正指数部分 这就是我所拥有的 假设单精度浮点数位于寄存器$t0 sll $t1, $t0, 9 t1 holds fraction part sll $t2, $t0, 1 srl $t2, $t2, 24 t2 holds exponent part srl $t3, $t0, 31 t3 holds the sign bit sll

我必须将一个浮点数(IEEE 754格式)乘以2,而不使用浮点指令

我遇到的问题是在乘法后修正指数部分

这就是我所拥有的

假设单精度浮点数位于寄存器$t0

sll    $t1, $t0, 9        t1 holds fraction part
sll    $t2, $t0, 1
srl    $t2, $t2, 24       t2 holds exponent part
srl    $t3, $t0, 31       t3 holds the sign bit

sll    $t1, $t1, 1        multiply fraction by 2
#do something to exponent in $t2 ##

#now put it all back together
sll    $t3, $t3, 31       put sign bit in the 31nd bit position
sll    $t2, $t2, 23       put exponent in the 30-23 bit positions
srl    $t1, $t1, 9        put fraction in the 22-0 bit positions

or     $t4, $t1, $t2
or     $t4, $t4, $t3      t4 now holds the value of t0*2

我不明白如果我把分数乘以2,指数会怎样变化。

你在这里做错事了

sll    $t1, $t1, 1        multiply fraction by 2
IEEE-754浮点数的值基于此公式

(-1)符号×1.尾数×2指标

当乘以2时,只有基数点向右移动,所有位保持不变,因此尾数部分与之前相同(除非指数溢出或值不正常)。要乘以2,将指数乘以1,而不是乘以2,因为2×2exp=2exp+1

所以你应该这样做

addi $t2, $t2, 1

所以,如果我想把$t0乘以2,我只需要提取指数位并加上一个?然后将新的指数追加回$t0?正确。将1天真地添加到该结果中会导致错误的结果