2009-12-18 5 views
2

quelqu'un peut-il montrer mon correct AT & T syntaxe pour faire ce que je fais ci-dessous dans INTEL je l'ai montré mes tentatives d'AT & T, mais ils ne compilent pas ...AT & T syntaxe en ligne

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

Pourriez-vous corriger le formatage, s'il vous plaît? – ndim

Répondre

1

Ces lignes:

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

devrait être:

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

Cela semble rendre gcc 3.4.4 heureux.

0

Jetez un oeil à intel2gas, qui est un outil pour traduire de la syntaxe Intel à AT & T syntaxe.