2009-12-18 68 views
2

任何人都可以证明我的正确的AT & T语法做下面我做在INTEL 什么我在AT &牛逼显示我的尝试,但他们并不编译...AT&T在线语法

unsigned int CheckIfGenuineIntel(void) 
{ 
    unsigned int VendorIdentificationString[4] = {0, 0, 0, 0}; 

#if defined(_DO_INTEL_) 
    __asm__ __volatile__ 
    (
     "xor eax, eax\n\t" 
     "cpuid\n\t" 
     "mov %0, ebx\n\t" 
     "mov %0 + 4, edx\n\t" 
     "mov %0 + 8, ecx" 
     :"=m"(VendorIdentificationString) 
     : 
     :"eax", "ebx", "ecx", "edx" 
    ); 
#else 
    asm volatile 
    (
     "xor %%eax, %%eax\n\t" 
     "cpuid\n\t" 
     "movl %%ebx, %0\n\t" 
     "movl %%edx, 4(%0)\n\t" 
     "movl %%ecx, $8(%0)" 
     :"=m"(VendorIdentificationString) 
     : 
     :"eax", "ebx", "ecx", "edx" 
    ); 
#endif 

    printf("\nCheckIfGenuineIntel: '%s'\n", (char *)&VendorIdentificationString[0]); 
    return 1; 
} 
+2

您能否修复格式? – ndim

回答

1

这些行:

"movl %%edx, 4(%0)\n\t" 
"movl %%ecx, $8(%0)" 

应该是:

"movl %%edx, 4+%0\n\t" 
"movl %%ecx, 8+%0" 

这似乎让gcc 3.4.4开心。

0

看看intel2gas,这是一个将英特尔语法翻译为AT语法的工具。

相关问题