Comment utilisez-vous les famille de sauts d'instructions?
Voici ce qu'ils ont:
Étiquette JL
"It" saute s'il est inférieur à ou s'il n'est pas supérieur ou égal à.
Ma question est quel est il dans cette phrase? Disons que j'ai une variable dans ebx
et que je veux passer à l'étiquette there:
si ebx
est <= 10
.
Plus précisément, je suis intéressé par l'utilisation de la famille d'instructions x86 jump
Le saut lui-même vérifie les drapeaux dans le registre EFL. Ceux-ci sont généralement définis avec TEST ou CMP (ou comme effet secondaire de nombreuses autres instructions).
CMP ebx,10
JLE there
Voir aussi: L'art du langage d'assemblage sur CMP
En guise de note: vous devriez obtenir le manuels de référence Intel . En particulier les deux parties "Intel® 64 et IA-32 Architectures Software Developer's Manual Volume 2: Instruction Set Reference" qui décrivent toutes les instructions x86.
L'instruction JLE
teste en fait deux drapeaux à la fois:
ZF
)CF
)Si les drapeaux Carry et Zero sont à 1, alors saut relatif court sera exécuté.
Peut-être juste un Word comment fonctionne l'instruction CMP
. L'instruction CMP
est similaire à SUB
(soustraire), mais le registre de destination ne sera pas mis à jour après l'exécution. Ainsi, le code suivant effectuera le même résultat comme CMP ebx, 1. Les instructions CMP et SUB affectent les drapeaux: drapeaux Carry, Parity, Auxiliary, Zero, Sign et Overflow.
Push ebx //store ebx value to stack
sub ebx, 10
pop ebx //restore ebx value from stack
L'assemblage x86 utilise un système d'indicateurs de bits qui représentent le résultat de comparaisons. Les instructions de saut conditionnel utilisent ces drapeaux pour décider d'effectuer ou non le saut.
Dans votre cas, vous utiliserez les deux instructions suivantes:
cmp ebx, 10 ; compare EBX and 10
jle label ; jump if the previous comparison is "less than or equal"
…
label:
…
JB - travailler avec des nombres non signés (sauter ci-dessous) <
JL - travailler avec des numéros signés
mov bx,0 // BX := 0
cmp bx,FF // 0 < -1 or 0 < 255 (Jump Flag and Sign Flag will change)
jl butter // if you use JL jump will not occurs, cus 0 > -1
jb butter // if you use JB jump will occurs, cus 0 < 255