2017-03-03 97 views
1

我正在尝试为arm组件创建宏(使用GNU工具)。比较gnu asm(gas)中的宏参数

.macro FUNCTION  name, attrs 
    .ifc \attrs\(),"global" 
     .global   \name 
    .endif 

    // other stuff 
.endm 

所以宏FUNCTION myFunc, global可以.global属性进行评估。 但是,marcro不处理此属性比较。简单地说.if永远不会被评估?

有没有办法比较这种类似字符串的宏参数?

+0

yeap,我说的是正常的asm,不是'in-line'的。顺便说一句**全球**没有任何类型的报价工程。 '.ifc \ attrs,global ... .endif'。无声的噪音,如果你把它作为答案,我会将其标记为正确的答案。谢谢。 – user3124812

回答

0

Gas使用single quotes来表示字符串而不是双引号。

.IFC字符串1,字符串

,汇编代码段如果两个字符串是相同的。字符串可以是,可选地用单引号引用。如果它们未被引用,则第一个字符串将停在第一个逗号处,而第二个字符串停在该行的末尾。 包含空格的字符串应引用。字符串比较区分大小写。

如果没有空格或其他解析问题,与全球,你可以用原来的名称没有任何引用。所以一个可以接受的解决方案是,

.macro FUNCTION  name, attrs 
    .ifc \attrs\(),global 
     .global   \name 
    .endif 

    // other stuff 
.endm