Por que as operações do MIPS em números não assinados fornecem resultados assinados?
Quando tento trabalhar em inteiros não assinados no MIPS, o resultado de cada operação que faço continua sendo assinado (ou seja, os inteiros são todos no complemento de 2), embora todas as operações que executo sejam não assinadas:addu
, multu
e então quarto ...
Quando imprimo números no intervalo[2^31, 2^32 - 1]
Eu recebo seu valor negativo "transbordado" como se eles fossem assinados (eu acho que eles são).
Porém, quando eu tento algo assim:
li $v0, 1
li $a0, 2147483648 # or any bigger number
syscall
o número impresso é sempre2147483647 (2^31 - 1)
Estou confuso ... O que estou perdendo?
PS: Eu não incluí meu código, pois ele não é muito legível (como é o código assembly) e deixar de lado esse problema, parece estar funcionando bem. Se alguém sentir que é necessário, vou incluí-lo imediatamente!