【问题标题】:Can I use function macros inside gcc inline assembly block?我可以在 gcc 内联汇编块中使用函数宏吗?
【发布时间】:2014-04-14 12:41:52
【问题描述】:
#define MOV_MACRO(R0,R1)\
{\
    "mov R0, R1 \n\t"\                                                      
}

__asm__ volatile(\
    MOV_MACRO(r4,r5)
    :"r4","r5"\
    );\

是否可以在 asm 块中使用这样的功能? 如果没有,请提出使用方法。

【问题讨论】:

    标签: gcc assembly macros


    【解决方案1】:

    是的,这是可能的,但如果您需要这样的功能,您可能不应该使用内联 asm,而是使用单独的 asm 模块。

    #define MOV_MACRO(R0,R1) "mov " #R0 ", " #R1 "\n\t"
    
    void foo()
    {
    __asm__ volatile(
        MOV_MACRO(r4,r5)
        ::
        :"r4","r5"
        );
    }
    

    【讨论】:

    • 你能回答为什么它不应该是 inline asm 吗?
    • 内联汇编通常应该用于简短的、简单的代码片段,其中函数调用不可能或有很大的开销。如果您需要似乎表明您的代码比这更复杂的宏。当然也有例外,这只是一般准则。
    猜你喜欢
    • 2012-05-16
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 2022-08-11
    • 2012-10-20
    • 2023-01-04
    • 1970-01-01
    相关资源
    最近更新 更多