为什么Visual Studio无需投诉就组装了mov eax,[edx] [ebx] [ecx] [edi]?

paw*_*lak 6 x86 assembly masm

在Visual Studio中,我写道:

mov eax, [edx][ebx][ecx][edi]
Run Code Online (Sandbox Code Playgroud)

但它组装得很好.

为什么它不是无效的有效地址?

Ros*_*dge 7

它似乎是更新版MASM中的一个错误.

使用以下文件作为示例:

    .586

_TEXT   SEGMENT USE32
    mov eax, [edx][ebx][ecx][edi]
_TEXT   ENDS
    END
Run Code Online (Sandbox Code Playgroud)

使用MASM 6.11d会生成以下错误:

t213a.asm(4) : error A2030: multiple index registers not allowed
Run Code Online (Sandbox Code Playgroud)

使用MASM 8.00.50727.42或更新版本时,没有错误,并且语句汇编为:

00000000: 8B 04 0F           mov         eax,dword ptr [edi+ecx]
Run Code Online (Sandbox Code Playgroud)

所以[edx][ebx][ecx][edi]不是有效的寻址模式.您正在使用的MASM版本中的错误是在它应该拒绝它作为错误时接受它.

  • 那是另一个@Michael ;-) (2认同)