2012-11-22 96 views
2

最近我向社区询问了两个偏移量差异Visual-C++ inline assembler difference of two offsets,并很快得到了答复,非常感谢。 现在我已经进入其他问题,这是更糟的。Visual-C++内联汇编程序编译不正确

我有一个像

..naked... 
    __asm{ 
    ... 
    mov eax, dword ptr [ebx + offset data1] 
    ... 
    } 

真正的问题的指示是,它被编译为

mov eax, [offset data1] 

此线路上没有编译器警告(/墙模式),但代码改了又改很多 - 想象一下,它会抛出ebx +的一部分!默默。 它是一个编译器错误或功能?也许我必须指定一些额外的标志?

问题是与仅偏移,由于

mov eax, dword ptr [ebx + 0xconst] 

正确编译。

是的,我能得到周围代码

mov eax, offset data1 
    add eax, ebx 
    mov eax, [eax] 

但是有很多的代码进行再变。困扰我的是没有任何警告;

回答

0

最后,我在MSDN论坛上找到了答案。 如果您只使用mov eax,[ebx + data1location]而不是mov eax,[ebx + offset data1location],则编译正确。但是,'offset'是MAS C语法的合法关键字,应该被MS C++编译器接受。但随后“ebx +”悄悄地被抛弃了。