Visual-C ++内联汇编程序编译错误

时间:2012-11-22 14:22:55

标签: c windows x86 inline-assembly

最近我向社区询问了两个偏差的差异Visual-C++ inline assembler difference of two offsets并得到了很快的回复,非常感谢。 现在我遇到了其他问题,这更糟糕。

我有像

这样的指示
    ..naked...
    __asm{
    ...
    mov eax, dword ptr [ebx + offset data1]
    ...
    }

真正的问题是它被编译为

    mov eax, [offset data1]

这一行没有编译器警告(/ WAll模式),但代码被更改和更改了很多 - 想象一下,它被抛出了ebx + part!默默。 它是编译器错误还是功能?也许我必须指定一些额外的标志?

问题仅在于偏移,因为

    mov eax, dword ptr [ebx + 0xconst]

编译正确。

是的,我可以使用代码

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

但是有很多代码需要改变。困扰我的是没有任何警告;

1 个答案:

答案 0 :(得分:0)

最后,我在MSDN论坛上找到了答案。 如果你只使用mov eax,[ebx + data1location],而不是mov eax,[ebx + offset data1location],它就可以正确编译。但是,' offset'是MSM ++编译器应该接受的MASM语法的合法关键字。但接着" ebx +"被悄悄地扔掉了。