【问题标题】:inline asm with gcc使用 gcc 的内联 asm
【发布时间】:2012-02-08 05:47:17
【问题描述】:

我有这部分代码是使用 ARMASM 编译的:

/* Software Interrupt */
/* we must save lr in case it is called from SVC mode */
#define ngARMSwi( code)   __asm { SWI code,{},{},{lr} }

使用示例: ngARMSwi(0x23);

我尝试将其转换为使用 gcc(代码源 GCC-4.6.2 eabi)进行编译。我找到了这个链接http://www.ethernut.de/en/documents/arm-inline-asm.html,但我找不到正确编译这一行的方法。

我最好的尝试是

#define ngARMSwi( code)  __asm__ ("SWI " (code) : : :"lr" )

但我得到编译错误:

error: expected ':' or ')' before '(' token

感谢任何帮助!

【问题讨论】:

    标签: gcc assembly arm


    【解决方案1】:

    你可能想要

    #define ngARMSwi(code) __asm__("SWI %0" : : "I"(code) : "lr")
    

    请注意,code 是指令的输入,因此它位于第三部分。它在指令中的位置由字符串中的%0 标记。 I 是对code 的约束,表示它必须是一个8 位常量。

    【讨论】:

    • 非常感谢!这段代码编译...我现在只需要确保它和以前一样!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 2020-02-17
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多