在網上找到的gcc內聯彙編示例中,我看到有時引用的寄存器名稱有時只有一個%
,其他時間有兩個(即%%
)。目前尚不清楚何時使用 單個%
以及何時使用%%
。 例如請看下面的例子。內聯彙編:註冊引用約定
/* Do b = a */
int a=10, b;
asm ("movl %1, %%eax;\n"
"movl %%eax, %0;"
: "=r" (b) /* output */
: "r" (a) /* input */
: "%eax" /* clobbered register */
);
它採用%%
前綴EAX
寄存器這個例子編譯我的x86機器(完成RedHat 5.6(Tikanga 2.6.18-238.5.1.el5 x86_64的,2.6.18內核,GCC 4.7.2)的罰款。但是,下面的一行代碼
asm ("movl %%ecx, %%eax");
產生下面的錯誤。
a.c: Assembler messages:
a.c:14: Error: bad register name `%%ecx'
可能有人請扔在何時使用%
一些光,當t o使用%%
?
謝謝。
您一定要閱讀http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html –