0

我正在尝试在 MASM 中编写一个小程序。在一条线上,当我尝试增加 ECX 时,我得到了这个错误......这似乎没有任何意义,因为只有一个操作数!

以下是相关代码:

mov ecx, eax
lea eax, DWORD PTR [ecx]
lea ecx, BYTE PTR [eax+4]
inc ecx

一开始,EAX只是一个字符串的长度,在这个0x05。

那么,有谁知道为什么会这样?谢谢!

4

2 回答 2

1

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.

于 2013-06-30T03:48:29.183 回答
0

BYTE PTR在这种情况下没有什么意义,并且可以安全地删除(尽管它不会对我造成任何错误)。LEA计算有效地址,它也可以用来执行一些一般的算术。

代码片段的作用是:

ecx = eax
eax = ecx
ecx = eax + 4
ecx++

可以用一条指令代替:

lea ecx,[eax+5]
于 2013-06-30T09:53:00.140 回答