Was macht Overflow in Statusflag (Assembler)?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Carry ist der Übertrag vom höchsten Bit. Wenn bei einer vorzeichenlosen Addition oder Subtraktion das Carry-Flag gesetzt wird, ist das Ergebnis falsch, weil der Wert zu groß oder zu klein ist, um mit dieser Bitbreite dargestellt zu werden.

Bei Additionen und Subtraktionen im 2er-Komplement ist die Sache komplizierter: Das Ergebnis ist genau dann korrekt, wenn es weder einen Übertrag vom zweithöchsten noch vom höchsten Bit gibt, oder wenn beide Überträge passieren. Das Overflow-Flag wird gesetzt, wenn nur einer dieser Überträge auftritt, das Ergebnis also nicht korrekt dargestellt wird.

4-Bit-Beispiele:

Der Übertrag (kleine Zahl) links ist das Carry-Flag C, gefolgt vom Hilfsübertrag H. (Die anderen beiden Überträge sind uninteressant.) Das Overflow-Flag entspricht C≠H:

vorzeichenlos (0..15)   2er-Komplement (-8..7)

  7 | 0 1 1 1
+ 7 | 0 1 1 1
----+⁰-¹-¹-¹-  C=0      H=1 ⇒ C≠H, also Overflow
=14 | 1 1 1 0  ok.      =-2 (falsch)

  5 | 0 1 0 1             
- 7 | 0 1 1 1
----+¹-¹-¹-⁰-  C=1      H=1 ⇒ C=H, kein Overflow
=14 | 1 1 1 0  falsch   =-2 (korrekt)

Verlassen des Wertebereiches. (Überlauf)

Mit 8 Bit kann ich 0-255 darstellen, addiere ich 200 und 130, dann komtm es zu einem Überlauf. Gleiches gilt für Multiplikationen.

Die exakten Details sind architekturabhängig udn in der Dokumentation verzeichnet.