Zero und Overflow Flag gleichzeitig gesetzt!?
ZF = 1 d.h. EAX =0
So wie kann Overflow gesetzt sein während EAX null ist ???!
1 Antwort
Das passiert z.B. bei folgender Addition (ich mache es zwecks Übersichtlichkeit jetzt nur mit 4 Bit):
1000 + 1000 = 0000
Denn das Overflow-Flag wird z.B. dann gesetzt, wenn die Summe zweier Zahlen mit gesetztem Vorzeichenbit ein Resultat mit gelöschtem Vorzeichenbit ergibt.
Achtung: Verwechsle nicht Overflow mit Carry!
Ja, das stimmt. Aber in diesem Fall soll das Carry Flag auch gesetzt sein !
Dieser Zustand kann auch das Resultat mehrere Befehle sein. Es gibt ja auch Befehle, die das Carry-Flag beeinflussen, nicht aber das Overflow-Flag (z.B. Rotate through Carry), dann bleibt das Overflow-Flag unverändert.
Und es gibt auch einen Befehl zum Löschen des Carry-Flags.
Ja, das auch möglich. Nach den ersten befehl nämlich MOV EAX, 300 werden die Flags 0 0 0 0, richtig??
Ach So !
Nach den vierten Befehlsfolge haben wir 1 0 1 0
Der CMP Befehl lässt auch die Flags unverändern ? Falls nicht, nach welchem Prinzip verändern er die Flags ?
CMP beeinflusst natürlich die Flags, sonst hätte man nichts davon.
Du musst nur in der Dokumentation der Befehle nachsehen. Dort steht bei jedem Befehl, welche Flags er beeinflusst.
Generell werden die Flags nur von solchen Befehlen beeinflusst, bei denen dies irgendwie sinnvoll ist, weil der Befehl etwas berechnet.
ich meine, wenn wir overflow und zero Flag gleichzeitig setzten, soll auch das carry Flag gesetzt sein. Aber das ist nicht der Fall in der Aufgabe !!!!