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

Ala*_* M. 4 assembly gcc arm

我正在尝试使用简单的内联asm命令C并使用gcc编译它.我想将变量推num送到堆栈:

asm (
    "push %0"
    :          //output
    : "r"(num) //input
    :          //clobber
);
Run Code Online (Sandbox Code Playgroud)

以上是产生错误:

Error: expression too complex -- `push r3'
Run Code Online (Sandbox Code Playgroud)

我正在学习这个教程,但我没有发现任何关于push命令的信息.

我也尝试过:

asm ( "push %num" ); //Assembler Error: expression too complex -- `push %num'
Run Code Online (Sandbox Code Playgroud)

和:

asm ( "push %[num]" ); //gcc error: undefined named operand 'num'
Run Code Online (Sandbox Code Playgroud)

但都没有效果.

编辑:

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

fuz*_*fuz 7

在ARM程序集中,该push指令是一种简写stmdb.它可以一次推送多个寄存器.因此,您必须在操作数周围使用大括号,因为它表示一组寄存器:

asm("push {%0}" : : "r"(num) : );
Run Code Online (Sandbox Code Playgroud)