I've spent the last 2 days to study AT&T inline assembly, but I'm having some problems converting this one:
static char vendername[50] = {0};
_asm {
mov eax, 0
cpuid
mov dword ptr [vendername], ebx
mov dword ptr [vendername+4], edx
mov dword ptr [vendername+8], ecx
}
Here is my try:
static char vendername[50] = {0};
__asm__(
"movl $0,%%eax \n"
"cpuid \n"
"movl %%ebx, %[vendername] \n"
"movl %%edx, %[vendername+$4] \n"
"movl %%ecx, %[vendername+$8] \n"
:"=r"(vendername) //user vendername as output
:[vendername]"m"(vendername) //use vendername as input
:"eax","ebx","edx","ecx" // clobbers those regs
);
This code doesn't work, gcc give me the following errors:
error: undefined named operand ‘vendername+4’
and
error: undefined named operand ‘vendername+8’
How do I convert the code from Intel assembly to AT&T assembly?