我正在尝试使用简单的内联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
在ARM程序集中,该push指令是一种简写stmdb.它可以一次推送多个寄存器.因此,您必须在操作数周围使用大括号,因为它表示一组寄存器:
asm("push {%0}" : : "r"(num) : );
Run Code Online (Sandbox Code Playgroud)