Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: .:UND3R:. en 21 Noviembre 2011, 16:23 pm



Título: Duda con la bandera de desbordamiento
Publicado por: .:UND3R:. en 21 Noviembre 2011, 16:23 pm
Hola a todos, tengo la siguiente duda con la bandera de desbordamiento (OF)

tengo dos instrucciones:
mov ax,7FF0h
add al,10h     ; CF=1 SF=0 ZF=1 0F=0

 11110000
 00010000
100000000

mov al,80
add al,80       ; CF=1 SF=0 ZF=1 0F=1

 10000000
 10000000
100000000

Mi duda es por qué la diferencia, tengo entendido que es el resultado de un xor del bit que es acarreado a MSB con el que bit que se acarrea hacia a fuera de MSB

por lo que en ambos sería xor 1,0 (1=bit acarreado hacia afuera de MSB y 0=bit acarreado hacia MSB) por lo que en resumen en ambos casos se activaría la bandera OF

Saludos


Título: Re: Duda con la bandera de desbordamiento
Publicado por: _Enko en 21 Noviembre 2011, 18:40 pm
Directo del manual de Intel.
Citar
The ADD instruction performs integer addition. It evaluates the result for both signed
and unsigned integer operands and sets the OF and CF flags to indicate a carry (overflow) in the signed or unsigned result, respectively

Sacamos parte del texto que esconde la respuesta
Citar

The ADD instruction performs integer addition. It evaluates the result for both signed and unsigned integer operands and sets the OF and CF respectively

Eso seria:
CARRY para  enteros positivos sin signo
OVERFLOW para enteros con signo.


80 + 80 > 128, por eso hay overflow.
Citar
char
signed: -128 to 127
unsigned: 0 to 255
Para crear el rango negativo supongo que el rango es ese:
0: -128
128: 0
255: 127
(editado: no, no lo es, ver post abajo)


Código
  1. mov al, 255/2
  2. add al, 1
  3. ;hay overflow, al= 128
  4.  
  5. mov al, 255
  6. add al, 1
  7. ;hay carry, al=0
  8.  

Saludos






Título: Re: Duda con la bandera de desbordamiento
Publicado por: x64core en 21 Noviembre 2011, 21:49 pm
hola!
tengo una duda respecto al tema , entonces eso quiere decir que si
trabajamos con partes de un registro y aplicamos operaciones aritmeticas y si en una operacion
aritmetica hay acarreo :P entonces por lo que e visto AH no se modifica eso quiere decir que
lo tomamos y si queremos que tenga logica de una suma con acarreo,  debemos sumarle ese acarreo "manualmente"  ?

porque por lo que e visto siempre hay acarreo en las dos operaciones :P


Título: Re: Duda con la bandera de desbordamiento
Publicado por: .:UND3R:. en 22 Noviembre 2011, 02:53 am
Ahora entiendo claramente

byte con signo: -128 a +127
bytes sin signo: 0 a 255

pero mi duda es por qué el 80 es considerado un byte con signo?

cuando es y cuando no es considerado un valor con signo o sin signo?

Saludos

PD: recién me inicio, _Enko tú lo sabes

Saludos


Título: Re: Duda con la bandera de desbordamiento
Publicado por: x64core en 22 Noviembre 2011, 03:22 am
cuando el limite de un valor en binario osea el primer bit ( el bit mas significativo ) es 1
algo que me fije es que en las instrucciones de .:UND3R:., estas:

mov al,80
add al,80

80 esta en base 10 osea que en hexadecimal es 50, por eso 80h
50d = 80h ( -128 ) =  1000 0000b

_Enko corrijeme... :P


Título: Re: Duda con la bandera de desbordamiento
Publicado por: _Enko en 22 Noviembre 2011, 03:33 am
Ahora que estoy en casa, me pude armar la tabla:
Código
  1. mov al, -128;al = 80h
  2. mov al, -2  ;al = FEh
  3. mov al, -1; ;al = FFh
  4. mov al, 0   ;al = 0h
  5. mov al, 127 ;al = 7F
  6. mov al, 128 ;al = 80h
  7. mov al, 255 ;al = FFh
  8.  

Fijate que -128 y 128 tienen el mismo valor: 80h.
y tambien -1 y 255 valen FFh.


Ahora la respuesta a tus dos preguntas:
Es el programador quien decide como tratarlos. En el caso de un lenguaje de alto nivel como C, ya existe un tipo de dato predefinido que es con o sin signo.

En ensamblador el tipo de datos es el mismo BYTE, WORD, DWORD pero depende de como lo armes tu:
Código:
mov eax, 80h
cmp eax, 128 ;ZF set, son iguales
cmp eax, -128;ZF set, son iguales

Rara vez he usado enteros con signo. Normalmente en ensamblador se utilizan enteros positivos cosa que el valor se refleje en el registro.
Porque generalmente, cuando me ha tocado hacer algo con signo, tambien era un numero real, cosa que para eso esta la FPU.


Título: Re: Duda con la bandera de desbordamiento
Publicado por: .:UND3R:. en 22 Noviembre 2011, 04:16 am
Ahora todo aclarado, saludos RHL y _Enko