![](/img/trans.png)
[英]Assembly , syscall not work as expected. Ubuntu Linux x86_64 , using AT&T syntax
[英]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.