Was macht Overflow in Statusflag (Assembler)?
Negative - Flag = negatives ALU ergebnis
Carry - Flag = ALU Ergebnis erzeugte Carry (Übertrag)
Zero - Flag = ALU Ergebnis ist Null
Overflow - Flag = ALU Ergebnis erzeugte Overflow. ~ Was ist Overflow ?
Was macht es genau? Ich verstehe es nicht.. kann mir da Jemand helfen?
2 Antworten
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.
Du kannst hier mal drauf schauen.
https://sites.google.com/site/arch1utep/home/course_outline/arithmetic_flags
Weißt du zufällig wie das detektiert wird? Im Zweier Komplement ist es einfach: Pos + Pos Zahl ergibt ganz vorne 0, wenn nicht overflow. Aber wie ist es allgemein? Gerade in Bezug auf dein Beispiel.