Instructions cmp + jl

Le problème exposé dans ce sujet a été résolu.

Bonjour,

je suis un vrai débutant en asm x86 et je dois analyser un stub dans le cadre de mes études.

1
2
cmp eax, 5000h
jl short loc_423004

Si je comprends bien, la première ligne calcule 5000h - eax. Et si eax était effectivement plus petit que 5000h, alors on saute au label loc_423004.

En gros c'est pareil que

1
2
3
if (eax < 5000) {
    goto: loc_423004
}

Merci d'avance

En réalité, c'est un peu plus fourbe que cela. Déjà, la première ligne calcule eax - 5000h et non le contraire, ensuite elle positionne les flags en fonction du résultat.

De son côté, jl saute au label fourni en opérande si les flags OF et SF sont différents. Cela se produit si eax interprété comme un entier signé est inférieur à 5000h. Par exemple, si eax contient 80000000h, le saut sera effectué.

C'est important, parce qu'il existe aussi l'instruction jb, qui ne saute que si eax interprété comme un entier non signé est inférieur à l'opérande donné. Avec mon exemple, jb ne sauterait pas.

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte