La Web del Programador: Comunidad de Programadores
 
    Pregunta:  24815 - NUMEROS NEGATIVOS EN ENSAMBLADOR
Autor:  Raul Rocha
estoy eleborando un programa en lenguaje ensamblador sobre las operacione aritmeticas basica con numeros enteros pero no he podido hacerlo funcionar con numeros negativos. soy un principiante en este lenguaje gracias por su ayuda

  Respuesta:  Manuel Redondo
Para utilizar números negativos en binario, se tienen que complementar a 2. Es decir, reservar un bit para el signo. De hecho, todo esto lo hace el compilador y tú no te tienes que preocupar de nada. Pero, si quieres programar a más bajo nivel, necesariamente tienes que complementar a 2 (hay procesadores que tienen instrucciones específicas).

  Respuesta:  Paul Guerra
Para utilizar números enteros negativos se procede como si fuese cualquier otro número:

mov eax, -5
mov dword ptr [ebx], -50
...

Hay que tener en cuenta que los números negativos no se diferencian de los números positivos. Por lo que el código del programa es el que define cómo hay que tratarlos. Para aclarar las cosas:

mov eax, -5
mov ebx, 2
cmp eax,ebx
ja salto ;El salto se produce, aunque nosotros no queremos que salte
...
salto:
...

Lo correcto sería:

mov eax, -5
mov ebx, 2
cmp eax,ebx
jg salto ;El salto no se produce
...
salto:
...

La instrucción JA (Jump if Above) no diferencia entre positivos y negativos, aunque JG (Jump if Greater) sí lo hace.