Assembly 可以在GNU汇编程序中定义一个命名的美元本地标签吗?

Assembly 可以在GNU汇编程序中定义一个命名的美元本地标签吗?,assembly,local,labels,att,Assembly,Local,Labels,Att,是否可以编写类似于.finished$:的内容,而不是1$:,并且此标签仅在定义下一个非本地标签之前有效 这样会更具描述性,几个月后我仍然会知道为什么会出现这种情况。 当然,我可以在它旁边写一条评论,但这(至少对我来说)有点费劲 如果这样的事情是不可能的,那么当然我没有其他的可能性(除了编写自定义预处理器) 来自奥地利的问候 是的。您所指出的(.finished$)非常有效 编辑:嗯,我完全错了。很抱歉误导了寻找答案的人 根据我对您问题的理解,您需要GNUas中的本地标签。据我所知,那是不可能的

是否可以编写类似于
.finished$:
的内容,而不是
1$:
,并且此标签仅在定义下一个非本地标签之前有效

这样会更具描述性,几个月后我仍然会知道为什么会出现这种情况。 当然,我可以在它旁边写一条评论,但这(至少对我来说)有点费劲

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

来自奥地利的问候

是的。您所指出的(
.finished$
)非常有效

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

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

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

否则,您可以使用本地符号(而不是标签,请参见注释),如
.L
,其中
.L
确保它是本地文件,但我通常不喜欢它。然而,它确实需要额外的输入

但是,在这种情况下,您可以用C完成大部分工作并使用GNU扩展汇编程序,注意在AssemblyTemplate中,您有以下选项:

特殊格式字符串
[…]
“%=”

输出一个数字,该数字在整个编译过程中对asm语句的每个实例都是唯一的。当创建本地标签并在生成多个汇编指令的单个模板中多次引用它们时,此选项非常有用


因此,您可以在GNU内联汇编程序中使用标签,如
%=labelname:
,这样就可以了。即使如此,你想完成什么?也许有更好的办法。

是的,是的。您的答案有了很大的改进,所以我收回了我的决定。@zx485:但这仍然是错误的:
,因为在某些目标上
只支持美元本地标签,不包括x86。TIGCC文档仅针对TI-89/TI-92+计算器进行讨论。主线气体手册()说,在支持美元的目标上,美元本地标签在美元后使用冒号,而不是美元。在任何情况下,它只适用于编号的本地标签。您可以有文件作用域本地符号名(如
.Lfoo
),但只能有编号的本地标签。TL:DR:
.finished$:
汇编用于x86,但它只是一个包含美元符号的普通符号名。如果在一个文件中使用它两次,则这是一个错误,如
func1:.finished$
/
func2:.finished$
。e、 g.
Error:symbol'.finished$'已经定义
并且
.finished$
没有
没有汇编:
错误:未知伪操作:'.finished$'
顺便说一句,您应该建议
.Lfinished:
(本地符号名称,不会出现在
.o
中)。它仍然具有文件作用域,但这就是为什么
gcc-S
输出使用
.L0
.L1
等标签名称的原因。