Was ist der Unterschied zwischen Übertrags- und Überlaufflag während der binären Multiplikation?


Beste Antwort

Zu Beginn müssen wir diese Punkte hervorheben:

  • ALU ist es egal, ob Sie vorzeichenbehaftete oder vorzeichenlose Mathematik ausführen.
  • ALU führt nur die Binärdatei aus Mathe und setzt die Flags entsprechend.
  • In signed numbers Das Vorzeichenbit ist ein Bit, das das Vorzeichen der Zahl angibt. Es befindet sich im höchstwertigen Bit.

– In vorzeichenlose Arithmetik, wir müssen das Übertragsflag beobachten, um Fehler zu erkennen.

– In signiert Arithmetik, wir müssen das Überlaufflag beobachten, um Fehler zu erkennen.

– Das Übertragsflag wird gesetzt, wenn:

  • Das Hinzufügen von zwei Zahlen bewirkt, dass die höchstwertigen (am weitesten links liegenden) Bits adde ausgeführt werden d.
  • 1111 + 0001 = 0000> => Übertragsflag ist aktiviert.
  • Die Subtraktion von zwei Zahlen erfordert eine Ausleihe in die höchstwertige (ganz links) ) Bits subtrahiert.
  • 0000 - 0001 = 1111> => Übertragsflag ist aktiviert.

– die Überlauf-Flag wird gesetzt, wenn:

  • die Summe zweier Zahlen mit dem Vorzeichenbit off ein Ergebnis ergibt Nummer mit dem Vorzeichenbit on.
  • 0100 + 0100 = 1000> => Überlaufflag ist aktiviert.
  • Die Summe zweier Zahlen mit dem Vorzeichenbit on ergibt eine Ergebniszahl mit dem Vorzeichenbit off.
  • 1000 + 1000 = 0000> => Überlaufflag ist aktiviert.
  • Beachten Sie, dass : Mixed-Sign Addition aktiviert niemals das Überlauf-Flag.

– Um dies klarer zu machen, sehen wir uns diese beiden Beispiele an:

1- Nehmen Sie die folgende binäre Addition `0111 + an 0010 = 1001 `

– wenn wir vorzeichenlose Mathematik betreiben

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

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

– wenn wir signierte Mathematik machen

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

7 + 2 = -7 // error detected

2- Nehmen Sie die folgende binäre Addition `1111 + 0001 = 0000`

an – wenn wir vorzeichenlose Mathematik ausführen

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

15 + 1 = 0 // error detected

– wenn wir signierte Mathematik ausführen

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.

Schließlich finden Sie hier weitere Informationen: http://teaching.idallen.com/dat2343/10f/notes/040\_overflow.txt

Antwort

Aus mechanistischer Sicht wird das Übertragsflag gesetzt, wenn das höchstwertige Bit übertragen wird. Das Überlauf-Flag wird gesetzt, wenn ein Übertrag in das höchstwertige Bit vorliegt.

Bei vorzeichenloser Arithmetik müssen Sie sich nur um den Übertrag kümmern Flagge. Wenn etwas aus dem höchstwertigen Bit ausgeführt wird, ist das Ergebnis zu groß, um in einem einzelnen Register enthalten zu sein.

Bei vorzeichenbehafteter Arithmetik ist die Situation komplexer. Ein Überlauf tritt auf, wenn das Übertragsflag und das Überlaufflag unterschiedlich sind. Hier finden Sie alle Alternativen zum Hinzufügen von zwei 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

Beachten Sie, dass die Zeilen 2, 5 und 6 aufgrund von Überlauf zu falschen Ergebnissen führen und dass dies auch der Fall ist, wenn sich CF von OF unterscheidet.

Einige Prozessoren führen diesen Vergleich möglicherweise für Sie durch, und das OF, das Sie sehen, ist möglicherweise das Ergebnis des Vergleichs eines internen Übertragsflags mit dem Übertragsflag. Es ist weiterhin nur für vorzeichenbehaftete Arithmetik gültig.

Es funktioniert auch mit anderer Arithmetik, einschließlich Multiplikation.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.