汇编中的“inc”究竟是如何运作的?

时间:2017-06-04 13:25:50

标签: assembly x86

我正在学习集会,我不确定这里的小事。 所以我在这里得到了这段代码

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”进行比较,那么为什么我不能以同样的方式增加它呢?

感谢您的每一个提示。

1 个答案:

答案 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,或者你可能正在查看未经优化的代码。