我想弄清楚,我有这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
?
答案 0 :(得分:3)
不,LEA指令不会更改标志。它放在CMP
和JA
之间,所以当处理器忙于从内存中读取以执行比较时,它可以执行LEA
指令,该指令既不依赖于前者,也不具有依赖性。遵循指示。
希望当达到JA
指令时,处理器将准备好CMP的结果,并且不会添加任何延迟。
答案 1 :(得分:2)
并非所有操作码都修改标志。 lea
指令不是。 cmp
设置的标记仍然具有相同的值,并执行ja
。