【问题标题】:GNU assembler: creating a symbol using macro argumentGNU 汇编器:使用宏参数创建符号
【发布时间】:2017-01-04 23:42:26
【问题描述】:

我有一个创建标签的宏,但我只想创建那些尚未定义的标签。问题是标签是使用宏参数构建的,而汇编器不喜欢使用宏参数生成的符号。这是不起作用的代码。它在 ifndef 上出错。有没有其他写法?

.macro create_handler modifier
  .ifndef handler\modifier
    handler\modifier:
    some code
    some more code
  .endif
.endif

错误:行尾有垃圾,第一个无法识别的字符是 `\'

【问题讨论】:

    标签: macros gnu gnu-arm


    【解决方案1】:

    我认为有两个问题。一种是\modifier: 查找名为modifier: 的宏参数,带有冒号。您需要改用\modifier\():\() 分解字符串,以便解析器知道您刚刚结束了参数的名称。

    其次,最后一个.endif应该是.endm

    .macro create_handler modifier
      .ifndef handler\modifier
        handler\modifier\():
          .4byte 0
      .endif
    .endm
    
    create_handler foo
    create_handler foo
    

    这导致了这个列表(忽略行号,我将它添加到我现有的文件之一):

      74 0010 00000000  create_handler foo
      75                create_handler foo
    DEFINED SYMBOLS
      ../src/core_dict.S:74     .text:00000010 handlerfoo
    

    如您所见,只创建了一个handlerfoo

    【讨论】:

      猜你喜欢
      • 2021-08-13
      • 1970-01-01
      • 2013-11-14
      • 2022-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-11
      • 1970-01-01
      相关资源
      最近更新 更多