0

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

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

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

4

1 回答 1

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创建了一个。

于 2016-10-21T05:02:09.933 回答