2009-12-18 2 views
2

кто может показать свой синтаксис правильный AT & T делать то, что я делаю ниже INTEL я уже показал свои попытки AT & T, но они не собирают ...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, который является инструментом для перевода с синтаксиса Intel на AT & T синтаксис.

Смежные вопросы