Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gcc GNU汇编宏_Gcc_Assembly_X86_Gnu Assembler_Osdev - Fatal编程技术网

Gcc GNU汇编宏

Gcc GNU汇编宏,gcc,assembly,x86,gnu-assembler,osdev,Gcc,Assembly,X86,Gnu Assembler,Osdev,我试图在GNU汇编程序(2.26.1)(gcc 5.4.0)中构建一个简单的宏,但在多次交互后出现了一些错误:无效字符'('in助记符 我试着听从医生的建议,但运气不好 .macro macro_gen_irqh isrb, isre _irq_entry_\isrb\(): cli call isr_common_handler .if \isre-\isrb macro_gen_irqh "(\is

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

我试着听从医生的建议,但运气不好

    .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\u entry\uisrb():替换为“(\isrb)”:它确实适用于枚举,但没有所需的完整标签名

最终结果应该是:

_irq_entry_0:
   cli
   call isr_common_handler
_irq_entry_1:
.
.
_irq_entry_2:
.
.

如果使用
.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
进行了许多更改,但一个重要的更改是,如果对宏参数使用
%
,它将被视为表达式,结果将作为字符串返回。我在这一行中利用了这一点:

macro_gen_irqh %isrb+1,\isre
宏生成irqh 0 1的结果是:

_irq_entry_0:
    call isr_common_handler

_irq_entry_1:
    call isr_common_handler

谢谢。我确实试过了.altmacro,但错过了宏参数中的%。