Qual è la differenza tra il carry e il flag di overflow durante la moltiplicazione binaria?


Migliore risposta

Allinizio dobbiamo sottolineare questi punti:

  • ALU non si preoccupa se stai facendo matematica con o senza segno.
  • ALU fa solo il binario matematica e imposta i flag in modo appropriato.
  • In signed numbers il bit di segno è un bit che indica il segno del numero e si trova nel bit più significativo.

– In unsigned aritmetica, dobbiamo controllare il carry flag per rilevare gli errori.

– In signed aritmetica, dobbiamo controllare il flag di overflow per rilevare gli errori.

– Il flag di trasporto è impostato se:

  • laggiunta di due numeri provoca lesecuzione dei bit più significativi (più a sinistra) adde d.
  • 1111 + 0001 = 0000 => il flag carry è attivato.
  • la sottrazione di due numeri richiede un prestito nel più significativo (a sinistra ) bit sottratti.
  • 0000 - 0001 = 1111 => il flag carry è attivato.

– il Flag di overflow è impostato se:

  • la somma di due numeri con il bit di segno off restituisce un risultato numero con il bit di segno on.
  • 0100 + 0100 = 1000 => il flag di overflow è attivato.
  • la somma di due numeri con il bit di segno on restituisce un numero di risultato con il bit di segno off.
  • 1000 + 1000 = 0000 => il flag di overflow è attivato.
  • Tieni presente che : segno misto Laddizione non attiva mai il flag di overflow.

– per rendere più chiaro “s vedere questi 2 esempi:

1- supponi la seguente aggiunta binaria` 0111 + 0010 = 1001 `

– se stiamo facendo matematica senza segno

0111 + 0010 = 1001 // overflow flag is turned on.

7 + 2 = 9 // its ok, we only care about the carry flag

– se stiamo facendo matematica con segni

0111 + 0010 = 1001 // overflow flag is turned on.

7 + 2 = -7 // error detected

2- supponi la seguente aggiunta binaria `1111 + 0001 = 0000`

– se stiamo facendo matematica senza segno

1111 + 0001 = 0000 // carry flag is turned on.

15 + 1 = 0 // error detected

– se stiamo facendo matematica con segni

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.

infine, puoi trovare maggiori informazioni qui: http://teaching.idallen.com/dat2343/10f/notes/040\_overflow.txt

Risposta

Da un punto di vista meccanicistico, il contrassegno di riporto viene impostato quando viene eseguito il bit più significativo. Il flag di overflow viene impostato quando cè un carry nel bit più significativo.

Con laritmetica senza segno devi solo preoccuparti del carry bandiera. Se viene eseguito qualcosa dal bit più significativo, il risultato è troppo grande per essere contenuto in un singolo registro.

Per laritmetica con segno la situazione è più complessa. Loverflow si verifica quando il flag di riporto e il flag di overflow sono diversi. Ecco tutte le alternative per laggiunta su due bit.

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

Nota che le righe 2, 5 e 6 producono risultati errati a causa delloverflow e che questi sono anche quando CF è diverso da OF.

Alcuni processori potrebbero fare questo confronto per te e OF che vedi potrebbe essere il risultato del confronto di un flag di carry-in interno con il flag di carry (out). Sarà ancora valido solo per laritmetica con segno.

Funziona anche con altri aritmetici, inclusa la moltiplicazione.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *