2012-12-30 34 views
3

未知的令牌當編譯此代碼與蘋果LLVM 4.1在Xcode我得到一個錯誤:內聯彙編使用LLVM Intel語法:在表達

#include <stdio.h> 

int main(int argc, const char * argv[]) 
{ 
    int a = 1; 
    printf("a = %d\n", a); 

    asm volatile(".intel_syntax noprefix;" 
     "mov [%0], 2;" 
     : 
     : "r" (&a) 
     ); 

    printf("a = %d\n", a); 
    return 0; 
} 

的錯誤是Unknown token in expression

如果我在& T語法,它工作正常:

asm volatile("movl $0x2, (%0);" 
       : 
       : "r" (&a) 
       : "memory" 
       ); 

什麼是錯的第一個代碼?

+0

相關:http://stackoverflow.com/questions/ 10990018 /如何對生成組件代碼與 - 鐺功能於Intel的語法 –

回答

5

它看起來像編譯器(我的機器上%rcx)翻譯%0%reg和彙編不喜歡%(因爲它是英特爾模式)。

我不知道是否可以將自動寄存器分配功能(extended asm)與intel語法混合使用,因爲我還沒有看到任何示例。

約GCC內嵌彙編良好的文檔通常是很難得的,和鐺國在其documentation,它的主要有這方面的GCC兼容...