“inc ecx”指令操作数必须大小相同?

时间:2013-06-30 01:54:14

标签: assembly masm32

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

以下是相关代码:

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

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

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

2 个答案:

答案 0 :(得分:1)

您实际上可以用以下内容替换最后两行(您给出的):

lea ecx, BYTE PTR [eax+5]

LEA获取操作数的地址,因此BYTE PTR [eax+4]的值只是eax+4,它存储在ecx中。由于您之后会增加,因此您可以将两个添加项合并为一个,这样您就可以使用BYTE PTR [eax+5]

答案 1 :(得分:0)

BYTE PTR在这种情况下毫无意义,可以安全地删除(虽然它不会给我带来任何错误)。 LEA计算有效地址,也可用于执行一些通用算法。

代码段的作用是:

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

可以用一条指令代替:

lea ecx,[eax+5]