2010-12-29 16 views
9

Come si utilizza jump family di istruzioni?Assembly JLE jmp instruction example

Questo è quello che hanno:

etichetta JL
"E" salta se è inferiore o se non è maggiore o uguale a.

La mia domanda è che cosa è si in questa frase? Dire che ho una variabile in ebx e voglio saltare all'etichetta there: se ebx è <= 10.

In particolare mi interessa utilizzando la famiglia x86 salto di istruzioni

risposta

12

Il salto si controlla i flag nel registro delle EFL. Questi sono solitamente impostati con TEST o CMP (o come effetto collaterale di molte altre istruzioni).

CMP ebx,10 
JLE there 
  • CMP corrisponde al calcolo della differenza degli operandi, aggiornando i flag e scartando il risultato. Tipicamente utilizzato per assegni più grandi/più piccoli
  • TEST corrisponde al calcolo del numero binario AND degli operandi, aggiornando i flag e scartando il risultato. In genere utilizzato per i controlli di uguaglianza.

Consulta anche: The art of assembly language on CMP

Come sidenote: Si dovrebbe ottenere il Intel reference manuals. In particolare le due parti "Manuale dello sviluppatore del software per architetture Intel® 64 e IA-32 Volume 2: Riferimento del set di istruzioni" che descrive tutte le istruzioni x86.

+1

In questo esempio, fa JLE salto in cui il 10 è inferiore o uguale a EBX o salta quando ebx è minore o uguale a 10? –

+1

@AndersonGreen Salta quando il contenuto di ebx è <= 10. – d0rmLife

3

L'assembly x86 utilizza un sistema di bit-flags che rappresenta il risultato dei confronti. Le istruzioni di salto condizionale usano questi flag quando decidono se eseguire il salto o meno.

Nel tuo caso devi utilizzare le seguenti due istruzioni:

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

JLE istruzioni Prove in realtà due bandiere in una volta:

  • Zero Flag (ZF)
  • Carry flag (CF)

Se i flag di trasporto e zero sono 1, verrà eseguito il salto relativo short.

Forse solo una parola come funziona l'CMP. L'istruzione CMP è come SUB (sottrazione), ma il registro di destinazione non verrà aggiornato dopo l'esecuzione. Quindi il codice seguente eseguirà lo stesso risultato come CMP ebx, 10.Le istruzioni CMP e SUB hanno effetto sui flag: flags Carry, Parity, Auxiliary, Zero, Sign e Overflow.

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

JB - lavoro con i numeri senza segno (Vai sotto) <

JL - lavoro con i numeri con segno

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