#include

unsigned int veax;

unsigned int vebx;

unsigned int vedx;

unsigned int vecx;

//执行CPUID指令

void cpuid(unsigned int veax1)

{

asm("cpuid"

:"=a"(veax),

"=b"(vebx),

"=c"(vecx),

"=d"(vedx)

:"a"(veax));

}

//做移位操作,把寄存器中的值以“%d”形式输出

void LM(unsigned int var,uint32_t *vx)

{

int i;

for(i=0;i<3;i++)

{

var=(var>>i);

vx[i]=var;

}

}

static void

getcpuid (char *id)

{

uint32_t ax[3],cx[3],dx[3];

cpuid(1);

LM(veax,ax);

cpuid(3);

LM(vecx,cx);

LM(vedx,dx);

sprintf(id,"%u%u%u%u%u%u%u%u%u",ax[0],ax[1],ax[2],cx[0],cx[1],cx[2],dx[0],dx[1],dx[2]);

}

int main(void)

{

char cpuid[100];

getcpuid(cpuid);

printf("cpuid is %s\\n",cpuid);

return 0;

}

Logo

更多推荐