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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top