【问题标题】:How can I add more than one inline assembly instruction in a macro with VC++?如何使用 VC++ 在宏中添加多个内联汇编指令?
【发布时间】:2011-08-11 13:22:54
【问题描述】:

为什么下面的宏用 1 条内联汇编指令编译,而不用 2 条编译?

这段代码编译成功:

#define foo(x,output,ctx) {\
    __asm\
    {\
        mov eax, 0xCAFEBEE1\
    }\
} 

但是这段代码会产生错误:

#define foo(x,output,ctx) {\
    __asm\
    {\
        mov eax, 0xCAFEBEE1\
        add eax, 5\
    }\
}

【问题讨论】:

    标签: visual-studio-2010 compiler-construction compiler-errors inline-assembly


    【解决方案1】:

    试试这个:

    #define foo(x,output,ctx) {\
        __asm mov eax, 0xCAFEBEE1 \
        __asm add eax, 5\
    }
    

    【讨论】:

      【解决方案2】:

      每当您遇到预处理器问题时,请务必使用项目 + 属性、C/C++、预处理器、预处理到文件 = 是。构建,您将在构建目录中找到一个 .i 文件。这会在您的 sn-p 上显示:

      int wmain(int argc, _TCHAR* argv[])
      {
          { __asm { mov eax, 0xCAFEBEE1 add eax, 5 }};
          return 0;
      }
      

      现在很明显,宏行上没有行尾。诅咒预处理器让你感觉更好。然后每行一个 __asm 来修复。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-02
        • 2018-09-15
        • 2023-03-10
        • 2017-05-30
        • 1970-01-01
        • 2012-08-03
        • 2019-03-04
        • 2012-05-16
        相关资源
        最近更新 更多