内联汇编中的引号

Quotation mark in inline assembly

如何使用 asm() 中包含引号的汇编指令? 喜欢:

asm(
".section .rdata,"dr"\n"
);

上面的代码给我这个错误:

expected ')' before 'dr'

任何字符串文字,而不仅仅是 asm 声明所需的字符串文字,如果被转义,都可以包含双引号。你用 \ 来逃避它们。因此,当应用于您的示例时:

asm(
".section .rdata,\"dr\"\n"
);

像往常一样,使用 "\"" 将双引号放在 C 字符串文字中。


按照您的要求进行并不一定 100% 安全。如果您不恢复正确的部分,您可能会遇到类似 Can't declare .data in inline assembly 的问题。

如果您在 inline-asm 中更改部分,那么如果内联 asm 语句位于 C 源文件的最后可能是安全的。

但您最好使用 .pushsection,这样您就可以将 assembler 留在开始时使用 .popsection 的同一部分。为现有 .S 文件自动执行此操作可能只需要稍微复杂一些的文本处理,并且仍然可以使用简单的算法。

尽管假设 assembler 当前位于内联汇编开头的 .text 部分中,但在这种情况下,.section .text 位于末尾您的 inline-asm 字符串应该是安全的。 (此处猜测。)


这是肯定是assemble一个stand-alone.S文件分开,link两个目标文件肯定更好

我想如果你使用的是只允许一个翻译单元的在线编译器,这可能是一个有用的 hack,但对于 one-off 测试以外的任何事情,你应该让你的构建系统支持.S 文件,而不是这种将编译器输出转换为 inline-asm 语句的丑陋技巧。 (我假设这是编译器输出,或者你只是手写了它。)