是否可以在GNU Assembler中定义一个命名的美元本地标签?

时间:2014-07-21 18:27:17

标签: assembly local labels att

是否可以编写.finished$:而不是1$:之类的内容,这个标签只有在定义下一个非本地标签之后才有效?

这样会更具描述性,几个月后我仍然会知道为什么会这样。 当然我可以在旁边写一个评论,但这对(至少对我而言)有点费力。

如果这样的事情不可能,那么我当然没有其他可能性(除了编写自定义预处理器)。

来自奥地利的问候!

1 个答案:

答案 0 :(得分:1)

是的,确实如此。你所指出的(.finished$)完美无缺。

编辑:嗯,我完全错了。很抱歉误导人们寻找答案。

根据我对您的问题的理解,您需要GNU as中的本地标签。据我所知,这是不可能的。

标签冲突只能在同一个源文件中找到。如果你从原始源文件中分离出每个函数(这是唯一可以修复的情况),那么它就可以工作了。如果它们都属于一个功能,那么你就完成了。这似乎是纯装配的最佳和最易管理的解决方案。

否则,您可以使用.L<function_id>_<local_label>之类的本地符号(不是标签,请参阅注释),其中.L确保它是文件本地的,但我通常不喜欢它。但是,它确实需要额外打字。

但是,如果您可以在C中完成大部分工作并使用GNU扩展汇编程序,the GNU extended assembly page注意在 AssemblyTemplate 中,您有以下选项:

  

特殊格式字符串
  [...]
  '%='
  输出一个对整个编译中的asm语句的每个实例都唯一的数字。在创建本地标签并在生成多个汇编器指令的单个模板中多次引用它们时,此选项很有用。

由此,您可以在GNU内联汇编程序中使用.%=labelname:之类的标签,它将起作用。即便如此,你想要完成什么?在某个地方可能有更好的方法。