我正在尝试使用带有默认at&t语法的gcc内联汇编从堆栈读取值。 我的代码是
unsigned int ret_val;
__asm volatile(
"movq %%rbp %0;\n"
:"=r"(ret_val)
);
我收到错误:
Assembler messages:
Error: junk `%eax' after register
此错误的含义是什么?如何摆脱这个错误。 我已经在SO question上阅读了一些类似的问题,但没有得到他们的帮助。 我更感兴趣的是了解错误背后的原因以及正确的方法。
代码是为x86_64 ubuntu机器编写的。
由于
答案 0 :(得分:3)
有两个问题。首先 - 你需要在mov命令中的寄存器之间使用逗号:
"movq %%rbp, %0;\n"
其次,您需要64位变量来保存%rbp
的值。 {x 1}在x86_64 linux上是32位的。您可以使用int
或最好使用long
。