web-dev-qa-db-fra.com

Exemple d'instruction JLE jmp d'assemblage

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

16
bobobobo

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
  • CMP correspond au calcul de la différence des opérandes, à la mise à jour des drapeaux et à la suppression du résultat. Généralement utilisé pour les contrôles plus/moins importants
  • TEST correspond au calcul du ET binaire des opérandes, à la mise à jour des drapeaux et à la suppression du résultat. Généralement utilisé pour les contrôles d'égalité.

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.

16
CodesInChaos

L'instruction JLE teste en fait deux drapeaux à la fois:

  • Drapeau zéro (ZF)
  • Carry flag (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
11
GJ.

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:
…
4
Ondrej Tucny

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
1
Mario Augusto