什么'__asm __(“。previous”);'意思?

时间:2010-03-10 12:42:22

标签: gcc assembly inline-assembly

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

  

汇编信息:
  错误:行尾的垃圾,第一个无法识别的字符是'“'   错误:未知的伪操作:'.previous'

我在其中一个标题的末尾找到了这段代码:

__asm__(".section \".plc\"");
__asm__(".previous");

由于我对在线汇编程序指令没有任何经验,我用Google搜索了解释,但找不到我的两个基本问题的答案。 __asm__(".previous");实际上做什么以及为什么有人将它放在头文件的末尾。

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

请启发我!

1 个答案:

答案 0 :(得分:5)

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

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

如果你想 - 在函数中间 - 在数据段中声明一个常量,你可以像这样使用.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