【问题标题】:Comparing macro parameters in gnu asm (gas)比较 gnu asm (gas) 中的宏参数
【发布时间】:2017-03-03 00:20:16
【问题描述】:

我正在尝试为 arm 程序集创建宏(使用 GNU 工具)。

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

    // other stuff
.endm

因此可以使用.global 属性评估宏FUNCTION myFunc, global。 但是,宏不处理此属性比较。简而言之,.if 从未被评估过?

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

【问题讨论】:

  • 是的,我说的是普通的 asm,而不是“内联”。顺便说一句,没有任何类型的引号的 global 作品。 .ifc \attrs, global ... .endif。 @artless 噪音,如果您将其作为答案,我会将其标记为正确答案。谢谢。

标签: arm gnu-assembler


【解决方案1】:

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

.ifc string1,string2

如果两个字符串相同,则汇编以下代码部分。字符串可以可选地用单引号引起来。如果它们没有被引用,则第一个字符串在第一个逗号处停止,第二个字符串在行尾停止。 应引用包含空格的字符串。字符串比较区分大小写。

如果没有空格或其他解析问题,就像 global 一样,您可以直接使用名称而无需任何引号。所以一个可接受的解决方案是,

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

    // other stuff
.endm

【讨论】:

    猜你喜欢
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 2011-02-28
    • 1970-01-01
    • 2021-04-14
    相关资源
    最近更新 更多