gpt4 book ai didi

gcc - GNU 汇编宏

转载 作者:行者123 更新时间:2023-12-03 19:11:25 24 4
gpt4 key购买 nike

我试图在 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:
.
.

最佳答案

如果您使用 .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 进行了许多更改,但重要的是,如果您使用 %在宏参数上,它被视为表达式,结果作为字符串返回。我在这一行中利用了这一点:
macro_gen_irqh %isrb+1,\isre
macro_gen_irqh 0 1的结果将是:
_irq_entry_0:
call isr_common_handler

_irq_entry_1:
call isr_common_handler

关于gcc - GNU 汇编宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61938723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com