如何解决GNU 汇编器宏中的上下文本地标签是否有可能?
是否可以从 GAS .set-symbol 中获取价值以将唯一的上下文本地标签生成到宏中? 例如,以下一对宏生成一对标签“for_label_$for_item”和“end_for_label_$for_item”:
.set for_item,0 # for-context counter
.macro for counter
.set for_item,for_item + 1
push $\counter
incq (%rsp) # dec-compencation
for_label_$for_item\(): # for-context local label
decq (%rsp) # for-counter -= 1
jnz 1f # start/continue if for-counter is not zero
jmp end_for_label_$for_item # no any iteration is needed
1: # next iteration
.endm
.macro end_for
jmp for_label_$for_item # check for the next iteration
end_for_label_$for_item: # for-context local label
sub $8,%rsp # pop for-counter from stack
.set for_item,for_item - 1
.endm
我的意思是“$for_item”符号必须用它的值替换,该值对于每对 for/end_for 宏来说都是唯一的。不幸的是,它没有按预期工作:GAS 将标签生成为常量 "for_label_$for_item"/"end_for_label_$for_item" 而不用其值替换 for_item 符号。第二个或嵌套使用 for/end_for 宏会导致诸如“错误:符号‘for_label_$for_item’已定义”之类的消息。
我检查了许多变体,如“\for_item”、“(for_item)”、“@for_item”等,但都没有成功。与其他汇编器(nasm 等)不同,GAS 似乎仅限于此类结构,不是吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。