Montage JLE jmp instructie voorbeeld

Hoe gebruik je de jump-familievan instructies?

Dit is wat ze hebben:

JL-label

“Het” springt als het kleiner is dan of als het niet groter is dan of gelijk is aan.

Mijn vraag is wat is hetin deze zin? Stel dat ik een variabele heb in ebxen dat ik naar het label there:als ebx<= 10.

In het bijzonder ben ik geïnteresseerd in het gebruik van de x86jump-familie van instructies


Antwoord 1, autoriteit 100%

De sprong zelf controleert de vlaggen in het EFL-register. Deze worden meestal ingesteld met TEST of CMP (of als bijwerking van vele andere instructies).

CMP ebx,10
JLE there
  • CMP komt overeen met het berekenen van het verschil van de operanden, het bijwerken van de vlaggen en het weggooien van het resultaat. Meestal gebruikt voor grotere/kleinere controles
  • TEST komt overeen met het berekenen van de binaire AND van de operanden, het bijwerken van de vlaggen en het weggooien van het resultaat. Meestal gebruikt voor gelijkheidscontroles.

Zie ook: Intel-referentiehandleidingenmoeten hebben. In het bijzonder het tweedelige “Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2: Instruction Set Reference” waarin alle x86-instructies worden beschreven.


Antwoord 2, autoriteit 71%

JLEinstructie voert twee tests uit:

  • Getekende vlag(SF) != Overloopvlag(OF)
  • Nulvlag (ZF) == 1

Als Zero flags 1 is en Signed Flag en Overflow Flag niet gelijk zijn, dan wordt de korte relatieve spronguitgevoerd.

Misschien even een woordje hoe CMP-instructie werkt. CMPinstructie is als SUB(aftrekken), maar het bestemmingsregister wordt niet bijgewerkt na uitvoering. Dus de volgende code geeft hetzelfde resultaat als CMP ebx, 10. CMP- en SUB-instructies zijn van invloed op vlaggen: Carry-, Parity-, Auxiliary-, Zero-, Sign- en Overflow-vlaggen.

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

Antwoord 3, autoriteit 24%

De x86-assembly gebruikt een systeem van bit-flags die het resultaat van vergelijkingen vertegenwoordigen. De voorwaardelijke spronginstructies gebruiken deze vlaggen om te beslissen of de sprong wel of niet moet worden uitgevoerd.

In jouw geval zou je de volgende twee instructies gebruiken:

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

Antwoord 4, autoriteit 12%

JB – werk met niet-ondertekende nummers (spring hieronder) <

JL – werk met ondertekende nummers

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

Other episodes