- Adição e subtração
- Overflow
- Multiplicação e divisão
- Representação de ponto flutuante
- Com sinal: [-2^31, 2^31 - 1]
- Sem sinal: [0, 2^32 - 1]
- Ultrapassando estes limites, resulta em overflow.
- Quando não conseguimos representar um número muito pequeno, temos underflow
- Semelhante à soma binária normal
O overflow pode acontecer:
- Na soma, quando o sinal dos operandos forem iguais
- Na subtração, quando os sinais dos operandos forem diferentes
- Soma, com sinais diferentes
- Subtração, com sinais iguais
- Usaremos o
addu
para não lançar exceção ao dar overflow (a funçãoadd
lança exceção).
.text
main:
addu $30, $t1, $t2
xor $t3, $t1, $t2 # verificação de sinal
slt $t3, $t3, $zero
bne $t3, $zero, sem-overflow # se o sinal dos operandos forem iguais e o do resultado diferente, houve overflow!
xor $t3, $t0, $t1
slt $t3, $t3, $zero
bne $t3, $zero, overflow
$t1 + $t2 > 2^32 - 1
$t1 > 2^32 - 1 - $t2
A negação de $t2
:
~x = 2^n - x
.text
main:
addu $t3, $t1, $t2
nor $t4, $t2, $zero # t3 = 2^32 - $t2 - 1
sltu $t4, $t4, $t1 # 2^32 - t2 - 1 < t1?
bne $t4, $zero, overflow