die Carry-Flag Ausgabe!
-
04-10-2019 - |
Frage
Es sei AX = FFFE und BX = 1234
jetzt, wenn wir cmp ax,bx
schreiben
(bx wird von Axt und die approprite flages abgezogen wird aktualisiert)
nun die binäre Darstellung der Zahlen in ax und bx ist gegeben durch
AX = 1111 1111 1111 1110
BX= 0001 0010 0011 0100
Wie bx wird von ax subtrahiert werden, so dass wir zu negieren bx haben (als Ergebnis = ax + (- bx))
so das negierte bx (2-Komplement von bx) gegeben ist durch.
BX= 1110 1101 1100 1100
Nun fügen wir sowohl ax und bx (als Subtraktion durch Zugabe in Computer implementiert ist)
AX= 1111 1111 1111 1110
BX= 1110 1101 1100 1100
------------------------------------
1 1110 1101 1100 1010
Nun, wie Sie sehen können, ist das Ergebnis von 17 Bit nun das 17. Bit in Carry flage gehen sollte, aber wenn ich es unter der Flagge carry geprüft ist 0, die CF = 0 ist, warum?
Lösung
einen Link hier gefunden: http://oopweb.com/Assembly/Documents/ArtOfAssembly/ Volumen / Chapter_6 / CH06-2.html
Es ist, als ich erwartet hatte. Der Carry-Flag wird nur gesetzt, wenn „borrow“ erforderlich war. Wenn Subtraktion tun, setzen Sie das Carry-Flag vor tun die „subtrahieren“ und die neue Carry-Flag sagt, wenn Sie leihen musste. Ihr Beispiel weggelassen, um die Zugabe von 1 für den voreingestellten Carry-Flag in Bit 17, die keinen Übertrag im Ergebnis führen werden.
Andere Tipps
Denken Sie an dem Carry-Flag als borrow Bit, wenn die Subtraktion durchgeführt wird. Es wird auf 1 initialisiert, so dass die Operation a−b−C
ist, das heißt, a + not(b) + C
statt a + not(b) + 1
wie Sie beschrieben. Mit anderen Worten, wird der Übertrag für subtrahieren invertiert, so dass es verwendet werden kann, mehr präzise subtrahieren zu tun.