我正在学习集会,我不确定这里的小事。 所以我在这里得到了这段代码
mov DWORD PTR [ebp-4],0X0
cmp DWORD PTR [ebp-4],0X9
.
.
.
lea eax,[ebp-4]
inc DWORD PTR [eax]
...
我不确定为什么我必须在这里使用“lea”和“eax”。如果我理解正确,[ebp-4]指向int(4个字节),值为0.我可以直接递增它而不使用“eax”reigster吗? 另外,显然我可以直接将[ebp-4]中的值与值“9”进行比较,那么为什么我不能以同样的方式增加它呢?
感谢您的每一个提示。
答案 0 :(得分:1)
简单:
lea eax,[ebp-4] ; eax = ebp-4
inc DWORD PTR [eax] ;decrease dword at location ebp-4 by one.
如果你写了:
inc DWORD PTR [ebp-4]
它会做同样的事情。
这里不需要使用EAX
,您可以在任何地方使用复杂寻址,无需花费任何费用(除了指令长度)。
也许代码重新使用eax
,或者你可能正在查看未经优化的代码。