我试图在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
答案 0 :(得分:7)
在ARM程序集中,push
指令is a shorthand for stmdb
。它可以一次推送多个寄存器。因此,您必须在操作数周围使用大括号,因为它表示一组寄存器:
asm("push {%0}" : : "r"(num) : );