我正在尝试在 MASM 中编写一个小程序。在一条线上,当我尝试增加 ECX 时,我得到了这个错误......这似乎没有任何意义,因为只有一个操作数!
以下是相关代码:
mov ecx, eax
lea eax, DWORD PTR [ecx]
lea ecx, BYTE PTR [eax+4]
inc ecx
一开始,EAX只是一个字符串的长度,在这个0x05。
那么,有谁知道为什么会这样?谢谢!
You can actually replace the last two lines (that you gave) with:
lea ecx, BYTE PTR [eax+5]
LEA
gets the address of an operand, so for BYTE PTR [eax+4]
that would just be the value eax+4
, which gets stored in ecx
. Since you're incrementing afterwards, you can just combine the two additions into one, so you can use BYTE PTR [eax+5]
instead.
BYTE PTR
在这种情况下没有什么意义,并且可以安全地删除(尽管它不会对我造成任何错误)。LEA
计算有效地址,它也可以用来执行一些一般的算术。
代码片段的作用是:
ecx = eax
eax = ecx
ecx = eax + 4
ecx++
可以用一条指令代替:
lea ecx,[eax+5]