2014-01-05 56 views
0

我正尝试从默认的& t语法中使用gcc内联程序集从堆栈中读取值。 我的代码是针对x86_64计算机的GCC内联汇编程序的汇编程序错误(at&t语法)

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机器编写的。

谢谢

回答

3

有两个问题。首先 - 你需要的寄存器之间的逗号MOV命令:

"movq %%rbp, %0;\n" 

其次,您需要64位变量来保存的%rbp值。在x86_64 linux上,int是32位。您可以使用long或最好是uint64_t

+0

我的不好那是一个可怕的错误 – abhi