2011-12-13 4 views
13

tengo el siguiente código:Asamblea - Llevar la bandera VS indicador de desbordamiento

mov al, -5 
add al, 132 
add al, 1 

Como puedo comprobar que, el indicador de desbordamiento y la bandera de acarreo establecerá en la primera operación, y en el segundo, sólo el desbordamiento establecerá.

Pero no entiendo por qué:

  1. En número sin signo, el resultado es 143 (8FH), y para ello está en condiciones de 8 bits sin signo de número (es menor que 255) => el acarreo la bandera no se debe establecer. En el número firmado, el resultado es 127, se ajusta a la firma de 8 bits y el desbordamiento no se debe establecer.

¿Cuál es incorrecto? Gracias.

Respuesta

13

En la aritmética sin signo, ha agregado 0xFB a 0x84, es decir, 251 + 132, que de hecho es mayor que 8 bits, por lo que se establece el indicador de transporte.

En el segundo caso, que está añadiendo 127 a 1, que de hecho excede de un rango de 8 bits con signo, y así se establece el indicador de desbordamiento.

+0

Así que el desbordamiento se activará sólo cuando yo 'Añadir al 1'? Si borraré esta línea, ¿no se establecerá el desbordamiento? –

+1

@Tom: El desbordamiento se establecerá con las dos instrucciones 'add'. –

+0

Entonces, ¿puede explicarme por favor dónde se estableció el desbordamiento? porque tal como lo entendí, en el rango de -128 a 127 no está afectando el desbordamiento. –

21

desbordamiento se produce cuando el resultado de la adición de dos números positivos es negativo o el resultado de la adición de dos números negativos es positivo. Por ejemplo: +127+1=?

+127=0111 1111 
    +1=0000 0001 
    --------- 
    1000 0000 

Cuando miramos a los bits de signo de los dos operandos y el bit de signo de el resultado, nos damos cuenta que se ha producido desbordamiento y la respuesta es incorrecta.

Cuestiones relacionadas