2014-01-05 79 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