2009-08-12 6 views

Répondre

12

cmov ne fait pas une comparaison, il utilise le résultat d'une comparaison précédente - s'il est vrai, il interprétera le mov. cmovl signifie « effectuer mouvement si la comparaison précédente a donné lieu à « moins »

Par exemple:.

cmp ecx, 5 
cmovl eax, ebx ; eax = ebx if ecx < 5 
+0

Merci beaucoup! Très utile et clair! – Ryan

4

Il doit être précédé d'une autre instruction qui définit correctement les indicateurs, par exemple cmp.

cmp ebx, ecx ; compare ebx to ecx and set flags. 
cmovl ebx, eax ; if (ebx < ecx (comparison based on flags)) ebx = eax 
2

cmovl effectuera le déplacement si les drapeaux enregistrent les éléments suivants sont: SF!=OF

Ces drapeaux seraient être défini comme le résultat d'une opération précédente (généralement, mais pas nécessairement, une comparaison de quelque sorte).

l'instruction cmovl ne fonctionne pas de comparer son propre.

0

Dans AT ensemble & T le code équivalent serait:

cmp %ebx, %eax 
cmovl %ebx, %eax 

qui copie la valeur de %ebx à %eax, si était supérieure à la valeur de la valeur contenue dans %eax tenue à %ebx au moment de la l'appel cmp.

Avec vos valeurs par exemple, le résultat serait que le mouvement conditionnel ne copie la valeur de %ebx à %eax, comme 0x02 est nettement supérieure à 0x01.

Questions connexes