【问题标题】:Visual-C++ inline assembler compiled incorrectlyVisual-C++ 内联汇编程序编译不正确
【发布时间】:2012-11-10 23:14:46
【问题描述】:

最近我向社区询问了两个偏移量的差异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]

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

【问题讨论】:

    标签: c windows x86 inline-assembly


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2013-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多