内联asm与gcc

时间:2012-01-11 21:04:47

标签: gcc assembly arm

我有使用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

感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

你可能想要

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

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