2009-12-29 17 views
10

Cuando intento trabajar en enteros sin signo en MIPS, el resultado de cada operación que hago permanece firmado (es decir, los enteros son todos en complemento a 2), aunque cada operación que realizo es sin signo: addu, multu y así cuarto ...¿Por qué las operaciones de MIPS en números sin firmar dan resultados firmados?

Cuando imprimo números en el rango [2^31, 2^32 - 1] obtengo su valor negativo "desbordado" como si estuvieran firmados (supongo que sí).

Sin embargo, cuando intento algo como esto:

li $v0, 1 
li $a0, 2147483648    # or any bigger number 
syscall 

el número impreso es siempre 2147483647 (2^31 - 1)

Estoy confundido ... ¿Qué me falta?

PD: No he incluido mi código, ya que no es muy legible (como el código de ensamblaje) y dejando de lado este problema, parece estar funcionando bien. ¡Si alguien siente que es necesario, lo incluiré de inmediato!

Respuesta

14

De Wikipedia:

El MIPS32 Juego de Instrucciones estados que la palabra sin firmar como parte de sumar y restar las instrucciones, es un término equivocado. La diferencia entre las versiones de comandos firmadas y no firmadas no es una extensión de signo (o falta) de los operandos, pero controla si una captura se ejecuta en desbordamiento (por ejemplo, Agregar) o se ignora un desbordamiento (Agregar sin firmar). Un operando inmediato CONST para estas instrucciones siempre se extiende con signo.

De los MIPS Instruction Reference:

valores inmediatos toda la aritmética son signo extendido [...] La única diferencia entre las instrucciones con y sin signo es que las instrucciones firmadas puede generar una excepción de desbordamiento e instrucciones sin firmar se no.

+0

Estaba buscando en toda la red una respuesta ... en cualquier parte menos obvia. ¡Gracias! – dankilman

+0

Entonces, ¿por qué usan la terminología "firmado y sin firmar" en lugar de algo como "marcado y desactivado"? – dan04

+0

Es un nombre inapropiado. Lea la primera cita. –

1

Me parece que el verdadero problema es la llamada que está utilizando para imprimir números. Parece e interpretar siempre lo que pasa como firmado, y posiblemente también como obligatorio.

Cuestiones relacionadas