2015-05-10 11 views
5

Zerlegung einer ausführbaren Datei Ich stieß auf die Anweisung cmove. Ich habe bereits im Internet gesucht, aber ich habe nur gefunden, dass es eine bedingte Bewegung ist, und wenn die Quelle und das Ziel gleich sind, tritt das mov auf. was ich noch nicht verstanden habe, warum sollte ich es brauchen, da es die Operanden nicht ändert. Bitte könnten Sie mir ihren Zweck erklären, an einem Beispiel zu, wenn nötigZweck der cmove-Anweisung in x86-Assembly?

dank

Antwort

19

Die CMOVcc Anweisungen vergleichen nicht die Quelle und das Ziel. Es verwendet die Flags aus einem vorherigen Vergleich (oder einer anderen Operation, die die Flags setzt), die bestimmt, ob die Verschiebung durchgeführt werden soll oder nicht.

Beispiel; diese Kopien edx-ecx wenn eax und ebx sind gleich:

cmp eax, ebx 
cmoveq ecx, edx 

Dies macht das gleiche wie:

cmp eax, ebx 
jne skip 
    mov ecx, edx 
skip: 
+0

vielen Dank – maluz