2011-04-04 7 views
2

J'ai des problèmes pour comprendre cela. C'est dans la syntaxe intelcmp and ja question

cmp eax, 0x19 
ja greater 

eax contient la valeur -40. http://en.wikibooks.org/wiki/X86_Assembly/Control_Flow me dit que ja est la comparaison non signée du cmp précédent.

Pour autant que je sache, cela devrait sauter SI arg1 (0x19) est au-dessus arg2 (0xffffffd8)

0x19 semble plus petit que 0xffffffd8 pour moi. Le saut est en cours. Toute aide pour comprendre ma logique imparfaite très appréciée!

Répondre

6

C'est un peu difficile de répondre parce que différents assembleurs inversent l'ordre des opérandes. De l'apparence des choses, vous semblez utiliser l'assemblage de la syntaxe Intel, auquel cas ce que vous avez est à peu près équivalent à if (unsigned)eax > 0x19 goto greater. Cela étant, il est raisonnable que le saut soit pris.

+0

Merci beaucoup. L'information sur la page Web était confuse. Il a montré la syntaxe intel comme cmp arg2, arg1 et ensuite plus tard sur ledit saut si ja "première opération" est au-dessus de la seconde. Il n'a pas spécifié la syntaxe – flumpb

+4

@kisplit: Peut-être est-il plus facile de considérer que 'cmp a, b' est équivalent à' sub a, b', sauf qu'il ne change que les drapeaux, où 'sub' change les drapeaux * et * met la différence dans 'a'. –

0

Peut-être, 0xffffffd8 est un nombre négatif dans le complément de 32 bits deux. 0x19 est positif.