Mejor respuesta
Al principio, debemos enfatizar esos puntos:
-
ALU
no le importa si estás haciendo matemáticas con o sin signo. -
ALU
solo hace el binario matemáticas y establece las banderas de forma adecuada. - En
signed numbers
el bit de signo es un bit que indica el signo del número. y está ubicado en el bit más significativo.
– En unsigned aritmética, necesitamos observar el indicador de acarreo para detectar errores.
– En firmado aritmética, necesitamos observar el indicador de desbordamiento para detectar errores.
– El Carry Flag se establece si:
- la suma de dos números provoca un arrastre de los bits más significativos (más a la izquierda) suma d.
-
1111 + 0001 = 0000
=> la bandera de acarreo está activada. - la resta de dos números requiere un préstamo en el más significativo (más a la izquierda ) bits restados.
-
0000 - 0001 = 1111
=> la bandera de acarreo está activada.
– el Indicador de desbordamiento se establece si:
- la suma de dos números con el bit de signo
off
da un resultado número con el bit de signoon
. -
0100 + 0100 = 1000
=> el indicador de desbordamiento está activado. - la suma de dos números con el bit de signo
on
da como resultado un número de resultado con el bit de signooff
. -
1000 + 1000 = 0000
=> el indicador de desbordamiento está activado. - Tenga en cuenta que : signo mixto La adición nunca enciende la bandera de desbordamiento.
– para hacerlo más claro, veamos esos 2 ejemplos:
1- Supongamos la siguiente adición binaria `0111 + 0010 = 1001 `
– si estamos haciendo matemáticas sin firmar
0111 + 0010 = 1001 // overflow flag is turned on.
7 + 2 = 9 // its ok, we only care about the carry flag
– si estamos haciendo matemáticas con signos
0111 + 0010 = 1001 // overflow flag is turned on.
7 + 2 = -7 // error detected
2- asume la siguiente adición binaria `1111 + 0001 = 0000`
– si estamos haciendo matemáticas sin firmar
1111 + 0001 = 0000 // carry flag is turned on.
15 + 1 = 0 // error detected
– si estamos haciendo matemáticas con signos
1111 + 0001 = 0000 // carry flag is turned on.
-1 + 1 = 0 // its ok we only care about the overflow flag
// remember: Mixed-sign addition never turns on the overflow flag.
finalmente, puede encontrar más información aquí: http://teaching.idallen.com/dat2343/10f/notes/040\_overflow.txt
Respuesta
Desde un punto de vista mecanicista, la bandera de acarreo se activa cuando hay un acarreo del bit más significativo. La bandera de desbordamiento se activa cuando hay un acarreo en el bit más significativo.
Con la aritmética sin firmar solo tienes que preocuparte por el acarreo bandera. Si se realiza algo del bit más significativo, el resultado es demasiado grande para estar contenido en un solo registro.
Para la aritmética con signo, la situación es más compleja. El desbordamiento ocurre cuando la bandera de acarreo y la bandera de desbordamiento son diferentes. Aquí están todas las alternativas para sumar dos bits.
00 + 00 = 00, (0 + 0 = 0 decimal), CF = 0, OF = 0
01 + 01 = 10, (1 + 1 = -2 decimal) CF = 0, OF = 1 overflow
01 + 10 = 11, ( 1 + -2 = -1 decimal), CF = 0, OF = 0
01 + 11 = 00, ( 1 + -1 = 0 decimal), CF = 1, OF = 1
10 + 10 = 00, ( -2 + -2 = 0 decimal), CF = 1, OF = 0 overflow
10 + 11 = 01, ( -2 + -1 = 1 decimal), CF = 1, OF = 0 overflow
11 + 11 = 10, (-1 + -1 = -2 decimal), CF = 1, OF = 1
Tenga en cuenta que las líneas 2, 5 y 6 producen resultados incorrectos debido al desbordamiento y que estos también son cuando CF es diferente de OF.
Algunos procesadores pueden hacer esa comparación por usted y el OF que ve podría ser el resultado de comparar un indicador de acarreo interno con el indicador de acarreo (out). Seguirá siendo válido únicamente para aritmética con signo.
También funciona con otras aritméticas, incluida la multiplicación.