汇编程序错误:表达式太复杂了

时间:2016-06-27 07:23:41

标签: gcc assembly arm

我试图在C中执行简单的内联asm命令并使用gcc编译它。我想将变量num推送到堆栈:

asm (
    "push %0"
    :          //output
    : "r"(num) //input
    :          //clobber
);

以上是产生错误:

Error: expression too complex -- `push r3'

我跟随this tutorial,我发现push命令一无所知。

我也尝试过:

asm ( "push %num" ); //Assembler Error: expression too complex -- `push %num'

asm ( "push %[num]" ); //gcc error: undefined named operand 'num'

但都没有效果。

修改

我正在使用这个编译器:arm-linux-gnueabihf-gcc

1 个答案:

答案 0 :(得分:7)

在ARM程序集中,push指令is a shorthand for stmdb。它可以一次推送多个寄存器。因此,您必须在操作数周围使用大括号,因为它表示一组寄存器:

asm("push {%0}" : : "r"(num) : );