Встроенный синтаксис AT & T - PullRequest
2 голосов
/ 18 декабря 2009

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

1 голос
/ 18 декабря 2009

Эти строки:

"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 голосов
/ 01 января 2010

Взгляните на intel2gas , который является инструментом для перевода из синтаксиса Intel в AT & T синтаксис.

...