"Instruction operands must be the same size" 来自 .data 数组的 MOVDQU

"Instruction operands must be the same size" for MOVDQU from .data array

我有一个包含 2 个数组的 .asm 文件:

.DATA
compara byte 16 dup (?)
subtrai byte 16 dup (128)

然后我尝试在数组上使用 movdqu(到 xmm1xmm2),但我遇到了问题。
尽管它们的大小相同,但每个数组存储 16 个字节的数据,我得到错误:

error A2022: instruction operands must be the same size

movdqu xmm2, compara
movdqu xmm1, subtrai

MASM 是指一个元素(字节)的大小,而不是数组的总大小。就像你写 mov eax, compara 一样,你需要 mov eax, dword ptr compara 才能让它从 1 字节元素的数组中发出 4 字节的负载,即使它是 byte 4 dup(?)

movdqu xmm2, xmmword ptr [compara]

方括号是可选的,但 IMO 良好的风格总是将它们用于内存操作数。