簡體   English   中英

x86_64機器的GCC內聯匯編的匯編程序錯誤(at&t語法)

[英]Assembler Error for GCC inline assembly for x86_64 machine(at&t syntax)

我正在嘗試使用帶有默認at&t語法的gcc內聯程序集從堆棧中讀取一個值。 我的代碼是

unsigned int ret_val;
__asm volatile(
            "movq %%rbp %0;\n"
            :"=r"(ret_val)
            );

我收到一個錯誤:

Assembler messages:
Error: junk `%eax' after register

該錯誤的含義是什么,我該如何解決。 我已經閱讀了關於SO 問題的一些類似問題,但沒有得到他們的幫助。 我對了解錯誤的原因以及正確的解決方法更感興趣。

該代碼是為x86_64 ubuntu計算機編寫的。

謝謝

有兩個問題。 首先-在mov命令中的寄存器之間需要一個逗號:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM