elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  Duda con la bandera de desbordamiento
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda con la bandera de desbordamiento  (Leído 6,537 veces)
.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Duda con la bandera de desbordamiento
« 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


En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
_Enko


Desconectado Desconectado

Mensajes: 538



Ver Perfil WWW
Re: Duda con la bandera de desbordamiento
« Respuesta #1 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






« Última modificación: 22 Noviembre 2011, 03:41 am por _Enko » En línea

x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Duda con la bandera de desbordamiento
« Respuesta #2 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
« Última modificación: 22 Noviembre 2011, 00:06 am por RHL » En línea

.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Re: Duda con la bandera de desbordamiento
« Respuesta #3 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
En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
x64core


Desconectado Desconectado

Mensajes: 1.908


Ver Perfil
Re: Duda con la bandera de desbordamiento
« Respuesta #4 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
En línea

_Enko


Desconectado Desconectado

Mensajes: 538



Ver Perfil WWW
Re: Duda con la bandera de desbordamiento
« Respuesta #5 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.
« Última modificación: 22 Noviembre 2011, 03:39 am por _Enko » En línea

.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Re: Duda con la bandera de desbordamiento
« Respuesta #6 en: 22 Noviembre 2011, 04:16 am »

Ahora todo aclarado, saludos RHL y _Enko
En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Desbordamiento
Programación Visual Basic
LeandroA 4 3,023 Último mensaje 1 Noviembre 2009, 06:22 am
por LeandroA
Un ataque informático hace que una web foral muestre una bandera española
Noticias
wolfbcn 2 2,054 Último mensaje 6 Diciembre 2010, 09:51 am
por тαптяα
Crear una bandera
Diseño Gráfico
Attaque77 2 6,366 Último mensaje 22 Marzo 2011, 16:50 pm
por peib0l
Duda con la bandera [z]
Ingeniería Inversa
chEEtos 8 5,041 Último mensaje 30 Noviembre 2011, 01:30 am
por chEEtos
Bucle controlado por bandera
Programación C/C++
Katerina Dobreva 2 3,968 Último mensaje 2 Noviembre 2014, 16:49 pm
por Katerina Dobreva
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines