Chinaunix首页 | 论坛 | 博客
  • 博客访问: 408741
  • 博文数量: 35
  • 博客积分: 943
  • 博客等级: 准尉
  • 技术积分: 742
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-15 13:17
个人简介

积累知识,方便自己

文章分类

全部博文(35)

文章存档

2014年(2)

2013年(5)

2012年(13)

2011年(15)

分类: C/C++

2013-01-23 16:28:58

#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;
}


阅读(16295) | 评论(1) | 转发(2) |
给主人留下些什么吧!~~

ly_15372014-08-09 17:05:57

为什么linux上我用此代码,序列号还可以变??
感觉不靠谱啊。。。