我正在尝试在MASM中编写一个小程序。在一行中,当我尝试增加ECX时,我得到了这个错误...它似乎没有任何意义,因为只有一个操作数!
以下是相关代码:
mov ecx, eax
lea eax, DWORD PTR [ecx]
lea ecx, BYTE PTR [eax+4]
inc ecx
一开始,EAX只是一个字符串的长度,在这个0x05中。
那么,有谁知道为什么会这样?谢谢!
答案 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]