【问题标题】:x86 inline assembler flagx86 内联汇编器标志
【发布时间】:2009-06-23 16:37:14
【问题描述】:

愚蠢的问题,但我只是在 gcc 中找不到必要的标志。基本上,我的 C 程序中有以下内联汇编代码

__asm__ __volatile__ ("lea ebx, [timings] \n\t");

编译时,我收到一条错误消息:Error: invalid char '[' beginning operand 2[timings]'`

现在我记得很久以前我使用了某种标志,告诉编译器它是 x86 内联汇编。但是在网上找不到,请问有人可以告诉我我必须使用哪个标志吗?

非常感谢!

【问题讨论】:

    标签: c assembly x86 inline-assembly


    【解决方案1】:

    您不能使用 GCC 以这种方式指定变量。有关如何使用内联汇编程序的详细说明,请参阅this document。此外,请记住 GCC 使用 AT&T 语法,而不是 Intel 语法,因此您必须将目的地放在右侧。

    【讨论】:

    • 我过去做过,你可以用编译器指定你使用 intel 语法,但我傻了忘了怎么做
    • 我不知道它的效果如何,但来自 GCC 文档:-masm=DIALECT' Output asm instructions using selected DIALECT. Supported choices are intel' 或 att' (the default one). Darwin does not support intel'。
    【解决方案2】:

    尝试改用__asm__。更多信息请关注here

    另外,请尝试从汇编代码中删除 \n\t。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-19
      • 2013-07-23
      • 2015-05-19
      • 2019-05-11
      相关资源
      最近更新 更多