Assembly JLE Jmp Instruction Example


Answer :

The jump itself checks the flags in the EFL register. These are usually set with TEST or CMP(or as a side effect of many other instructions).

CMP ebx,10 JLE there 
  • CMP corresponds to calculating the difference of the operands, updating the flags and discarding the result. Typically used for greater/smaller checks
  • TEST corresponds to calculating the binary AND of the operands, updating the flags and discarding the result. Typically used for equality checks.

See also: The art of assembly language on CMP

As a sidenote: You should get the Intel reference manuals. In particular the two part "Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 2: Instruction Set Reference" which describes all x86 instructions.


JLE instruction conducts two tests:

  • Signed Flag (SF) != Overflow Flag (OF)
  • Zero flag (ZF) == 1

If Zero flags is 1 and Signed Flag and Overflow Flag are not equal, then the short relative jump will be executed.

Maybe just a word how CMP instruction works. CMP instruction is like SUB (subtract), but the destination register will not be updated after exsecution. So the following code will perform the same result like CMP ebx, 10. CMP and SUB instruction affect to flags: Carry, Parity, Auxiliary, Zero, Sign and Overflow flags.

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

The x86 assembly uses a system of bit-flags that represent the result of comparisons. The conditional jump instructions use these flags when deciding whether to perform the jump or not.

In your case you'd use the following two instructions:

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

Comments

Popular posts from this blog

Are Regular VACUUM ANALYZE Still Recommended Under 9.1?

Can Feynman Diagrams Be Used To Represent Any Perturbation Theory?