x86 内联汇编器标志

Posted

技术标签:

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

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

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

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

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

非常感谢!

【问题讨论】:

【参考方案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。

【讨论】:

以上是关于x86 内联汇编器标志的主要内容,如果未能解决你的问题,请参考以下文章

优化系列汇编优化技术:x86架构内联汇编及demo

x86 - 使用内联汇编设置位

Solidity 中编写内联汇编(assembly)

帮助理解 x86 内联汇编中的 DIV 指令

x86平台转x64平台关于内联汇编不再支持的解决

内联汇编