我试图传递一个空值给x64上GNU汇编中的宏函数,这个函数应该根据第一个参数是否为空添加三个值togather或两个值,例如,
.macro foo1 t0, t1, t2
.ifnb t0
add \t0, \t1
.endif
add \t1, \t2
.endm
foo2:
foo1 , %rax, %rbx
foo1 %rax, %rbx, %rcx
但是当我编译上面的代码时,gcc说expecting operand before ','; got nothing
,因为我调用foo1使用以下格式foo1 , %rax, %rbx
。所以我对如何使用.ifnb
伪操作以及如何将空参数传递给像foo1这样的宏感到困惑。
我试着在google上搜索,但是我得到了一些关于gnu程序集空白值的东西。https://sourceware.org/binutils/docs/as/If.html我也读过GAS官方文档,但它也没有提到如何使用.ifnb
,也没有为.macro
提供空参数示例。https://sourceware.org/binutils/docs/as/Macro.html
1条答案
按热度按时间t30tvxxf1#
.ifnb
的正确语法如下:你会得到一个令人困惑的错误消息,指向宏调用的那一行,因为它似乎是在宏扩展到
add , %rax
之后生成的,但仍然引用原始代码中的那一行。