如何使用jump family说明?
这就是他们所拥有的:
JL标签
如果它小于或者不大于或等于,则“它”跳跃。
我的问题是这句话中的它 是什么?假设我在ebx
中有一个变量,如果there:
为ebx
,我想跳转到标签<= 10
。
具体来说,我对使用x86跳转指令系列
感兴趣答案 0 :(得分:13)
跳转本身会检查EFL寄存器中的标志。这些通常使用TEST或CMP设置(或作为许多其他指令的副作用)。
CMP ebx,10
JLE there
另请参阅: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