汇编中难以理解的条件跳转命令

时间:2014-01-11 14:53:26

标签: assembly x86 ia-32

我想弄清楚,我有这3行汇编代码:

cmp     [ebp+var_4], 7
lea     esi, [esi+0]
ja      loc_8048F2C

考虑var_4是-4而ebp+var_4是整数的地址。 loc_8048F2C是一个标签。

好吧,我不明白ja(如果上面的跳转)命令何时起作用。 lea命令是否更改了标志(如ZF SF等...)?我认为汇编中的每个命令都会改变标志,我是对的吗?

换句话说:如果我的整数大于7,我们是否会跳转到loc_8048F2C

2 个答案:

答案 0 :(得分:3)

不,LEA指令不会更改标志。它放在CMPJA之间,所以当处理器忙于从内存中读取以执行比较时,它可以执行LEA指令,该指令既不依赖于前者,也不具有依赖性。遵循指示。

希望当达到JA指令时,处理器将准备好CMP的结果,并且不会添加任何延迟。

答案 1 :(得分:2)

并非所有操作码都修改标志。 lea指令不是。 cmp设置的标记仍然具有相同的值,并执行ja