[GNU汇编程序宏

问题描述 投票:3回答:1

我正在尝试在GNU汇编器(2.26.1)(gcc 5.4.0)中构建一个简单的宏,但在多次交互后出现一些错误:助记符中的无效字符'('

我试图按照https://sourceware.org/binutils/docs/as/Macro.html的建议使用\()或&,但没有运气。

    .macro macro_gen_irqh isrb, isre
    _irq_entry_\isrb\():
        cli
        call isr_common_handler
        .if  \isre-\isrb
           macro_gen_irqh    "(\isrb+1)",\isre
       .endif
    .endm

如果我将标签_irq_entry_ \ isrb()替换为“(\ isrb)”:它确实适用于枚举,但没有必需的完整标签名称。

最终结果应该是:

_irq_entry_0:
   cli
   call isr_common_handler
_irq_entry_1:
.
.
_irq_entry_2:
.
.
gcc assembly x86 gas osdev
1个回答
1
投票

如果使用.altmacro伪指令,您可以通过以下方式重写它:

.altmacro

.macro macro_gen_irqh isrb, isre
_irq_entry_\isrb:
    call isr_common_handler
    .if \isre-\isrb
        macro_gen_irqh %isrb+1,\isre
    .endif
.endm

altmacro进行了许多更改,但重要的是,如果对参数使用altmacro,它将被视为表达式,并且结果将作为字符串返回。我在这一行中利用了这一点:

%

macro_gen_irqh %isrb+1,\isre 的结果将是:

macro_gen_irqh 0 1
© www.soinside.com 2019 - 2024. All rights reserved.