你如何使用跳转指令系列?
这就是他们所拥有的:
如果小于或不大于或等于, JL 标签 “It”会跳转。
我的问题是这句话是什么?假设我有一个变量ebx
,我想跳转到标签there:
if ebx
is <= 10
。
具体来说,我对使用x86跳转系列指令感兴趣
跳转本身检查 EFL 寄存器中的标志。这些通常使用 TEST 或 CMP 设置(或作为许多其他指令的副作用)。
CMP ebx,10
JLE there
参见:CMP 上的汇编语言艺术
作为旁注:您应该获得英特尔参考手册。特别是两部分“英特尔® 64 和 IA-32 架构软件开发人员手册第 2 卷:指令集参考”,其中描述了所有 x86 指令。
JLE
指令进行两个测试:
SF
) !=溢出标志( OF
)ZF
) == 1如果零标志为 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
x86 程序集使用表示比较结果的位标志系统。条件跳转指令在决定是否执行跳转时使用这些标志。
在您的情况下,您将使用以下两个说明:
cmp ebx, 10 ; compare EBX and 10
jle label ; jump if EBX is "less than or equal" to 10
…
label:
…
JB - 使用无符号数(跳到下方)<
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