2016-05-18 7 views
-3

Vorausgesetzt, dass "... das Null-Flag (ZF) gesetzt ist, wenn das Ergebnis einer arithmetischen oder logischen Operation ein Ergebnis von Null erzeugt", wie interagiert der cmp-Befehl mit ZF?Wann ändert die cmp-Anweisung das zf-Flag? [x86 MASM]

der folgende Code-Schnipsel Gegeben,

mov eax, 0 
mov edx, 1 
cmp eax, edx 

Wie bewertet cmp die zwei Operanden und was ZF gesetzt? Wenn die Operanden umgekehrt wurden (cmp edx, eax), wird dann ZF auf denselben Wert wie in der ursprünglichen Anweisung gesetzt?

Wenn ich zwei identische Werte vergleichen würde, wie evaluiert cmp die Operanden und wofür wird ZF gesetzt?

cmp eax, eax 
+1

Siehe das [x86-Tag-Wiki] (http://Stackoverflow.com/tags/x86/info) für Links zu den Insn-Set-Referenzen und Tutorials/Guides. –

Antwort

3

wie funktioniert cmp bewerten die zwei Operanden?

Gerade von the manual:

Der Vergleich wird durch Subtrahieren des zweiten Operanden von dem ersten Operanden ausgeführt und dann die Status-Flags als die SUB-Befehl in der gleichen Weise einzustellen.


Wenn die Operanden (cmp edx, EAX) rückgängig gemacht wurden, dann wird ZF auf den gleichen Wert wie in der ursprünglichen Aussage?

Für die ZF, ja. Für die anderen Flags nicht unbedingt, da die Subtraktion nicht kommutativ ist.

+0

ZF wird nur gesetzt, wenn beide Operanden den gleichen Wert haben. Das Ändern der Reihenfolge hat keinen Einfluss darauf. Die Subtraktion ist kommutativ, wenn beide Operanden denselben Wert haben. –

+0

"subtrahieren und prüfen, ob gleich Null ist" ist zwar kommutativ – harold

+0

Das stimmt. Bearbeitet. – Michael