gcc - 什么 '__asm__(".previous");'意思?

标签 gcc assembly inline-assembly

在尝试编译我的项目时,它使用了一些第三方头文件,使用 mingw 4.4,我遇到了以下错误:

Assembler messages:
Error: junk at end of line, first unrecognized character is '"'
Error: unknown pseudo-op: '.previous'



我在包含的标题之一的末尾找到了此代码:
__asm__(".section \".plc\"");
__asm__(".previous");

由于我对内嵌汇编器指令完全没有任何经验,因此我在谷歌上搜索了解释,但找不到我的两个基本问题的答案。什么__asm__(".previous");实际上是这样做的,为什么有人会把它放在头文件的末尾。

这些是唯一的 __asm__整个项目的说明。我可以安全地删除它们吗?或者有没有办法定义 .previous 以使其成为已知的伪操作?

请赐教!

最佳答案

.previous是一个指令,允许您在两个 Sprite 部分之间来回交换。它是一种快捷方式,允许更密集的汇编文件,并允许您例如在代码流中声明初始化数据,反之亦然。

例如,假设您有一个包含数据和代码部分的汇编程序文件。

如果你想 - 在一个函数的中间 - 在数据段中声明一个常量,你可以像这样使用 .previous 语句:

  nop            // some code

.previous        // swaps current section (code) with previous section (data)

MyConstant:
  .word 0x0001   // some data

.previous        // swaps curent section (data) with previous section (code)

  nop            // more code

更多信息可以在引用手册中找到:

http://sourceware.org/binutils/docs-2.19/as/Previous.html#Previous

关于gcc - 什么 '__asm__(".previous");'意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2416879/

相关文章:

c - 嵌入式 C - 函数参数太多(指针)

assembly - 为什么每当我尝试使用中断时,我的 masm32 程序就会崩溃?

将 C 代码转换为 x86-64 汇编

c - GDB:汇编指令计算

c++ - 如何在内联汇编中实现这个?

c - C程序中的ASM代码导致段错误

c - macOS 和 Linux 下 qsort() 结果存在无法解释的差异

c - Cygwin 中无法识别的命令行选项 ‘-pthread’

assembly - 如何在 x86 汇编编程中表示 FFFFFFBB 等十六进制值?

c - Systrace 1.6f 编译错误