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 Vorzeichenbiton
. -
0100 + 0100 = 1000
> => Überlaufflag ist aktiviert. - Die Summe zweier Zahlen mit dem Vorzeichenbit
on
ergibt eine Ergebniszahl mit dem Vorzeichenbitoff
. -
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.