2010-12-29 1 views
9

Comment utilisez-vous les instructions jump family?Exemple d'instruction JLE jmp d'assemblage

Voici ce qu'ils ont:

étiquette JL
« Il » saute si elle est inférieure ou si elle ne dépasse pas ou égale à.

Ma question est ce qui est il dans cette phrase? Dites que j'ai une variable dans ebx et je veux sauter à l'étiquette there: si ebx est <= 10.

Plus précisément, je suis intéressé à utiliser la famille x86 de saut d'instructions

Répondre

12

Le saut se vérifie les drapeaux dans le registre EFL. Ils sont généralement définis avec TEST ou CMP (ou comme effet secondaire de nombreuses autres instructions).

CMP ebx,10 
JLE there 
  • CMP correspond au calcul de la différence des opérandes, la mise à jour des drapeaux et à rejeter le résultat. Typiquement utilisé pour des contrôles plus grands/plus petits
  • TEST correspond au calcul du binaire ET des opérandes, mettant à jour les indicateurs et rejetant le résultat. Généralement utilisé pour les vérifications d'égalité.

Voir aussi: The art of assembly language on CMP

En sidenote: Vous devriez obtenir le Intel reference manuals. En particulier les deux parties "Intel® 64 et IA-32 Architectures Logiciel Manuel du développeur Volume 2: Instruction Set Reference" qui décrit toutes les instructions x86.

+1

Dans cet exemple, ne saute JLE quand 10 est inférieur ou égal à EBX ou saute-t-il lorsque ebx est inférieur ou égal à 10? –

+1

@AndersonGreen Il saute lorsque le contenu de l'ebx est <= 10. – d0rmLife

3

L'assembly x86 utilise un système d'indicateurs de bits représentant le résultat des comparaisons. Les instructions de saut conditionnelles utilisent ces indicateurs pour décider d'exécuter ou non le saut.

Dans votre cas, vous devez utiliser les deux instructions suivantes:

instruction
cmp ebx, 10  ; compare EBX and 10 
jle label  ; jump if the previous comparison is "less than or equal" 
… 
label: 
… 
5

JLE teste en fait deux drapeaux à la fois:

  • Drapeau zéro (ZF)
  • Carry flag (CF)

Si les indicateurs Carry et Zero sont 1, le saut relatif court sera exécuté.

Peut-être juste un mot comment fonctionne l'instruction CMP. CMP l'instruction est comme SUB (soustraire), mais le registre de destination ne sera pas mis à jour après l'exsecution. Ainsi, le code suivant effectuera le même résultat comme CMP ebx, 10.Les instructions CMP et SUB affectent les indicateurs: Carry, Parity, Auxiliary, Zero, Sign et Overflow.

push ebx   //store ebx value to stack 
sub ebx, 10 
pop ebx   //restore ebx value from stack 
1

JB - travail avec des nombres non signés (Aller ci-dessous) <

JL - travail avec des chiffres 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 
Questions connexes