汇编JLE jmp指令示例

时间:2010-12-29 19:46:24

标签: assembly x86 mnemonics

如何使用jump family说明?

这就是他们所拥有的:

JL标签
如果它小于或者不大于或等于,则“它”跳跃。

我的问题是这句话中的 是什么?假设我在ebx中有一个变量,如果there:ebx,我想跳转到标签<= 10

具体来说,我对使用x86跳转指令系列

感兴趣

4 个答案:

答案 0 :(得分:13)

跳转本身会检查EFL寄存器中的标志。这些通常使用TEST或CMP设置(或作为许多其他指令的副作用)。

CMP ebx,10
JLE there
  • CMP对应于计算操作数的差异,更新标志和丢弃结果。通常用于更大/更小的检查
  • TEST对应于计算操作数的二进制AND,更新标志并丢弃结果。通常用于平等检查。

另请参阅:The art of assembly language on CMP

作为旁注:你应该得到Intel reference manuals。特别是两部分“英特尔®64和IA-32架构软件开发人员手册第2卷:指令集参考”,它描述了所有x86指令。

答案 1 :(得分:8)

JLE指令实际上一次测试了两个标志:

  • 零旗ZF
  • 携带标记(CF

如果Carry和Zero标志为1,则短相对跳跃将被执行。

也许只是一句话CMP指令如何运作。 CMP指令类似SUB(减法),但目标寄存器在执行后不会更新。因此,以下代码将执行相同的结果,如 CMP ebx,10 。 CMP和SUB指令影响标志:进位,奇偶校验,辅助,零,符号和溢出标志。

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

答案 2 :(得分:4)

x86程序集使用一个表示比较结果的位标志系统。在决定是否执行跳转时,条件跳转指令使用这些标志。

在您的情况下,您将使用以下两条说明:

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

答案 3 :(得分:1)

JB - 使用无符号数字(跳转下方)&lt;

JL - 使用签名号码

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