- 论坛徽章:
- 0
|
#include stdio.h>
typedef struct {
unsigned int eax;
unsigned int edx;
unsigned int ecx;
} cpusn_t;
int get_cpusn(cpusn_t *sn)
{
sn->eax = 1;
__asm__ (
"cpuid\n\t"
:"=c"(sn->ecx), "=d"(sn->edx), "=a" (sn->eax)
:"2" (sn->eax)
);
if ((sn->edx & (117)) == 0)
return 1;
sn->eax = 3;
__asm__ (
"cpuid\n\t"
:"=c"(sn->ecx), "=d"(sn->edx), "=a" (sn->eax)
:"2" (sn->eax)
);
return 0;
}
void print_cpusn(cpusn_t sn)
{
char buf[30];
snprintf(buf, sizeof(buf), "%04X-%04X-%04X-%04X-%04X-%04X",
sn.eax>> 16, sn.eax & 0xffff,
sn.edx>> 16, sn.edx & 0xffff,
sn.ecx>> 16, sn.ecx & 0xffff);
printf("%s\n", buf);
}
int main(void)
{
cpusn_t sn = {0, 0, 0};
if (get_cpusn(&sn) == 0) {
print_cpusn(sn);
} else {
//printf("edx = %x\n", sn.edx);
printf("Doesn't support this.\n");
}
return 0;
}
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/76292/showart_2052929.html |
|