2010-12-29 15 views
9

Jak korzystać z jump family instrukcji?Zestawienie JLE Przykład instrukcji Jmp

To właśnie oni mają:

etykieta JL
„To” skacze jeżeli jest ona mniejsza niż lub jeśli nie jest większa lub równa.

Moje pytanie brzmi co jest to w tym zdaniu? Że mam zmienną w ebx i chcę, aby przejść do etykiety there: jeśli ebx jest <= 10.

Szczególnie jestem zainteresowany wykorzystaniem rodzinę x86 skok instrukcji

Odpowiedz

12

Skok sam sprawdza flagi w rejestrze EFL. Są one zwykle ustawiane za pomocą TEST lub CMP (lub jako efekt uboczny wielu innych instrukcji).

CMP ebx,10 
JLE there 
  • CMP odpowiada obliczania różnicy argumentów, uaktualnianie flagi i odrzucając wynik. Zwykle używany do większych/mniejszych testów
  • TEST odpowiada obliczeniu binarnego AND operandów, aktualizacji flag i odrzuceniu wyniku. Zazwyczaj używany do kontroli równości.

Zobacz także: The art of assembly language on CMP

Jak sidenote: Powinieneś dostać Intel reference manuals. W szczególności dwuczęściowy "Podręcznik dla programistów Intel® 64 i IA-32 Architectures Software Volume 2: Podręcznik zestawu instrukcji", który opisuje wszystkie instrukcje x86.

+1

W tym przykładzie nie JLE skok gdy 10 jest mniejsza lub równa ebx czy skacze, gdy ebx jest mniejsze lub równe 10? –

+1

@AndersonGreen Przeskakuje, gdy zawartość ebx wynosi <= 10. – d0rmLife

3

Zespół x86 wykorzystuje system flag bitowych, które stanowią wynik porównań. Instrukcje warunkowego skoku używają tych flag przy podejmowaniu decyzji, czy wykonać skok, czy nie.

W twoim przypadku byłoby użyć dwie następujące instrukcje:

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

JLE instrukcja rzeczywiście testuje dwie flagi na raz:

  • Zero Oznacz (ZF)
  • Carry Flaga (CF)

Jeśli flagi przewijania i zerowania wynoszą 1, zostanie wykonany krótki skok względny .

Może wystarczy jedno słowo, jak działa instrukcja CMP. CMP instrukcja jest jak SUB (odejmij), ale rejestr docelowy nie zostanie zaktualizowany po egzekwowaniu. Poniższy kod wykona taki sam wynik, jak CMP ebx, 10.Instrukcje CMP i SUB mają wpływ na flagi: flagi przenoszenia, parzystości, pomocnicze, zero, znak i przepełnienie.

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

JB - praca z liczbami bez znaku (Przełącz poniżej) <

JL - praca z podpisanych liczb

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