为什么使用NASM组装时lea esi, dword [edx + ecx * 4]
会产生错误?
我得到错误:
insert_sort.asm:19:错误:操作数大小不匹配
但是,lea
的目的只是加载dword [edx + ecx * 4]
的地址,所以即使引用是针对DWORD值的,这也没关系吗?
另一方面,
mov eax, dword [edi]
如预期般完美运作。在这里,我声明
[edi]
引用一个DWORD值。 最佳答案
在lea
的情况下,大小说明符不相关。您不会从内存中加载任何内容-您只是在计算地址(甚至不必是您打算用作地址的内容-您可以使用lea
进行一般算术运算)。 lea esi, byte [edx]
和lea esi, dword [edx]
之间没有区别,因此完全没有大小说明符是没有意义的。
在您的mov
示例中,它实际上是多余的,因为可以从目标操作数中推断出大小。但是在mov
的情况下,它在某些情况下(例如mov byte [edi], 1
)实际上是相关的,而在lea
的情况下却没有关系。
请注意,您可以让lea
计算一个16位地址并将其零扩展到32位目标寄存器中(或计算一个32位地址并将其截断为16位目标寄存器)。但是,地址大小是根据Intel的手册确定的,而不是您在指令中指定的值,而是由“代码段的属性”确定的。
关于assembly - 为什么使用NASM组装时`lea esi,dword [edx + ecx * 4]`产生错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38784319/