gcc - GNU 汇编器宏
问题描述
我正在尝试在 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
推荐阅读
- amcharts - 如何将 y 轴最小值和最大值应用于类型为 xy 的图表?
- sql - 存储过程中支持的 SQL 命令
- javascript - ASP.NET MVC DropDownlist 事件到部分视图
- javascript - 如何知道 rxjs webSocket 中是否建立了连接?
- swift - 为什么我的@State 没有改变我的条件语句?
- python-3.x - Python3:如何检测 /dev/shm(或 ProcessPoolPexecutor)是否可以使用?
- c++ - 向量的复制构造函数
C++ - javascript - React-Native/Firestore - 按日期搜索
- c++ - 在OpenGL中掩盖地形表面的一个区域
- flutter - Flutter:如何让尾随图标随 largeTitle 移动?