Eu tenho que multiplicar um número de ponto flutuante (com o formato IEEE 754) por 2 sem usar instruções de ponto flutuante.
O que estou tendo problemas é consertar a parte do expoente após a multiplicação.
Isso é o que eu tenho.
Assuma o solteiro número de ponto flutuante de precisão está no registro $ 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
Eu não entendo como o expoente mudaria se eu multiplicasse a fração por 2.
Respostas:
1 para resposta № 1Você está fazendo a coisa errada aqui
sll $t1, $t1, 1 multiply fraction by 2
O valor do número de ponto flutuante IEEE-754 é baseado nesta fórmula
(-1)^sign * 1.mantissa * 2^exponent
Quando multiplicar por 2, somente o ponto de radix é movidoà direita, todos os bits permanecem inalterados, então a parte da mantissa é a mesma de antes. Para multiplicar por 2, você aumenta o expoente em 1, não multiplica por 2 porque 2*2^exp = 2^(exp+1)
Então você deveria fazer assim
addi $t2, $t2, 1