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 Para crear el rango negativo supongo que el rango es ese:signed: -128 to 127 unsigned: 0 to 255 0: -128 128: 0 255: 127 (editado: no, no lo es, ver post abajo) Código
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
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 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
|