La différence entre cmpl et cmp
J'essaie de comprendre de l'assemblée pour être en mesure de résoudre un puzzle. Cependant, j'ai rencontré les instructions suivantes:
0x0000000000401136 <+44>: cmpl $0x7,0x14(%rsp)
0x000000000040113b <+49>: ja 0x401230 <phase_3+294>
Ce que je pense faire, c'est:
La valeur de 0x14(%rsp) est -7380. Selon ma compréhension cmpl compare pas signé. Aussi le saut est effectué.
Donc, peut-il être qu' (non signé)-7380 > 7
(non signé)7380 > 7--> sauter
En fait, je ne veux pas de ça pour sauter. Mais est-ce l'explication correcte ou pas? Suis-je le retournement des arguments?
Aussi, si vous avez des conseils sur la façon de manipuler ce saut!
l dans cmpl est de spécifier 32 bits mémoire argument. un partie de ja est de spécifier signé/non signé. Rechercher dans les instructions de branchement.
Probablement une bonne idée de mentionner (et tag) que l'architecture des processeurs cela fait référence.
c'est juste le AT&T syntaxe taille du suffixe
Probablement une bonne idée de mentionner (et tag) que l'architecture des processeurs cela fait référence.
c'est juste le AT&T syntaxe taille du suffixe
OriginalL'auteur Sarah cartenz | 2014-06-09
Vous devez vous connecter pour publier un commentaire.
Il ne la fois, dans un sens.
La différence signé vs non signé est ici l'utilisation des instructions de saut.
Pour
>
, il estja
non signés, etjg
pour la signature (saut si ci-dessus et saut si supérieur).Pour
<
, il estjb
non signés, etjl
pour la signature (saut si ci-dessous et saut si inférieur).Pour être exact, ici, c'est le sens de plusieurs commandes de saut:
Thx, ajouté un peu de détail
En bref: G(reater) et L(ess) ont signé, le tout en Un(bove) et B(inférieur) sont pour les comparaisons.
Exactement, comme MicroVirus déjà écrit.
OriginalL'auteur glglgl
Je ne pense pas que x86 a effectivement une instruction appelée
CMPL
. C'est probablement la partie de la syntaxe de l'assembleur à donner des conseils sur des opérandes ou quelque chose d'autre (commeJZ
etJE
étant le même).De l'intel manuel sur ce qu'il fait:
Signe-ness est donné implicitement, parce que le complément à deux de la représentation des nombres.
Comment manipuler le saut? Si vous êtes sûr que le saut doit faire exactement le contraire de ce qu'il est en train de faire, vous avez juste à changer
JA
àJBE
.OriginalL'auteur typ1232