[非原创] 获取CPUID;

简介:     【注】本文是参考百度百科对CPUID指令的介绍而简要写的一个总结;但并不一定所有CPU都能支持获取CPUID;关于CPU序列号的表示可能不同人有不同写法。还有关于CPU缓存的信息的获取,需要根据返回的信息去查一个对照表,看起来不够简洁明了,所以关于CPU缓存信息获取的代码我就不写进去了。

    【注】本文是参考百度百科对CPUID指令的介绍而简要写的一个总结;但并不一定所有CPU都能支持获取CPUID;关于CPU序列号的表示可能不同人有不同写法。还有关于CPU缓存的信息的获取,需要根据返回的信息去查一个对照表,看起来不够简洁明了,所以关于CPU缓存信息获取的代码我就不写进去了。

    相关代码如下:

 

img_405b18b4b6584ae338e0f6ecaf736533.gif code_getCpuId
  1  //  GetCPUID.cpp : Defines the entry point for the console application.
  2  //
  3 
  4  #include  " stdafx.h "
  5  #include  < string .h >
  6 
  7  typedef unsigned  long  DWORD;
  8 
  9  #define  CI_VENDOR    0x01
 10  #define  CI_BRAND    0x02
 11  #define  CI_SERIAL    0x04
 12  #define  CI_ALL        (CI_VENDOR|CI_BRAND|CI_SERIAL)
 13 
 14  typedef  struct  _CPUINFO
 15  {
 16      unsigned  int  nMask;
 17       char  szVendor[ 16 ];
 18       char  szBrand[ 52 ];
 19       char  szSerial[ 32 ];
 20      unsigned  char  Serial[ 12 ];
 21 
 22  } CPUINFO,  * LPCPUINFO;
 23 
 24  // 获取CPUINFO
 25  void  GetCPUInfo(LPCPUINFO lpInfo)
 26  {
 27      DWORD _eax, _ebx, _ecx, _edx;
 28      DWORD i, j;
 29 
 30       if (lpInfo -> nMask  &  CI_VENDOR)  // vendor
 31      {        
 32          __asm
 33          {
 34              mov eax, 00h;
 35              cpuid;
 36              mov _ebx, ebx;
 37              mov _ecx, ecx;
 38              mov _edx, edx;
 39          }
 40          memcpy(lpInfo -> szVendor,      & _ebx,  4 );
 41          memcpy(lpInfo -> szVendor  +   4 ,  & _edx,  4 );
 42          memcpy(lpInfo -> szVendor  +   8 ,  & _ecx,  4 );
 43          lpInfo -> szVendor[ 12 ]  =   0 ;
 44      }
 45 
 46       if (lpInfo -> nMask  &  CI_BRAND)  // brand
 47      {        
 48           for (i = 0x80000002 , j = 0 ; i < 0x80000005 ;  ++ i,  ++ j)
 49          {
 50              __asm
 51              {
 52                  mov eax, i;
 53                  cpuid;
 54                  mov _eax, eax;
 55                  mov _ebx, ebx;
 56                  mov _ecx, ecx;
 57                  mov _edx, edx;
 58              }
 59              memcpy(lpInfo -> szBrand  +  j * 16 ,     & _eax,  4 );
 60              memcpy(lpInfo -> szBrand  +  j * 16 + 4 ,   & _ebx,  4 );
 61              memcpy(lpInfo -> szBrand  +  j * 16 + 8 ,   & _ecx,  4 );
 62              memcpy(lpInfo -> szBrand  +  j * 16 + 12 ,  & _edx,  4 );
 63          }
 64          lpInfo -> szBrand[ 48 ]  =   0 ;
 65      }
 66 
 67       if (lpInfo -> nMask  &  CI_SERIAL)  // serial
 68      {
 69          __asm
 70          {
 71              mov eax, 01h;
 72              xor edx, edx;
 73              cpuid;
 74              mov _eax, eax;
 75              mov _edx, edx;
 76          }
 77           if (_edx  &  ( 1 << 18 ))  //
 78          {
 79              memcpy(lpInfo -> Serial + 8 ,  & _eax,  4 );
 80              __asm
 81              {
 82                  mov eax, 03h;
 83                  xor ecx, ecx;
 84                  xor edx, edx;
 85                  cpuid;
 86                  mov _ecx, ecx;
 87                  mov _edx, edx;
 88              }
 89              memcpy(lpInfo -> Serial,  & _ecx,  4 );
 90              memcpy(lpInfo -> Serial + 4 ,  & _edx,  4 );
 91              sprintf(lpInfo -> szSerial, 
 92                   " %02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X-%02X%02X " ,
 93                  lpInfo -> Serial[ 0 ], lpInfo -> Serial[ 1 ], 
 94                  lpInfo -> Serial[ 2 ], lpInfo -> Serial[ 3 ],
 95                  lpInfo -> Serial[ 4 ], lpInfo -> Serial[ 5 ],
 96                  lpInfo -> Serial[ 6 ], lpInfo -> Serial[ 7 ],
 97                  lpInfo -> Serial[ 8 ], lpInfo -> Serial[ 9 ],
 98                  lpInfo -> Serial[ 10 ], lpInfo -> Serial[ 11 ]);
 99          }
100           else
101          {
102              memset(lpInfo -> Serial,  0 ,  12 );
103              strcpy(lpInfo -> szSerial,  " null " );
104          }
105      }
106  }
107 
108  int  main( int  argc,  char *  argv[])
109  {
110      CPUINFO info;
111      info.nMask  =  CI_ALL;
112      GetCPUInfo( & info);
113      printf( " Vendor: %s\n " , info.szVendor);
114      printf( " Brand:  %s\n " , info.szBrand);
115      printf( " Serial: %s\n " , info.szSerial);
116       return   0 ;
117  }

 

 

 

    输出如下:

    Vendor: GenuineIntel
    Brand:  Intel(R) Core(TM) i5 CPU       M 430  @ 2.27GHz
    Serial: null

    参考文档:

    CPUID, 百度百科

 

目录
相关文章
|
Linux
记一次CentOS7云主机无法启动的排障解决过程
记一次CentOS7云主机无法启动的排障解决过程
1518 0
|
13天前
|
人工智能 自然语言处理 API
阿里云Token Plan全面升级:模型 + Agent 工具,一次配齐千问、Qoder等各类 Agent工具
阿里云Token Plan完成重磅升级,原有价格不变、权益全面扩容,新增Harness Agent全链路开发权益,以Credits统一计量覆盖千问、DeepSeek等数十款主流模型与多模态能力。产品分为个人版与团队版两大序列,个人版三档39元/月起适配独立开发者,团队版按席位订阅提供企业级数据安全与多账号管理能力,搭配夜间五折、满减券等多重优惠,帮助用户低成本搭建全链路AI工作流。
|
4月前
|
弹性计算 人工智能 测试技术
阿里云价格最便宜的轻量应用服务器38元和199元,云服务器99元和199元,价格还能再便宜吗?
2026年阿里云最便宜云服务器的价格:轻量应用服务器2核2G抢购价低至38元/年,2核4G为199元/年;ECS经济型e实例99元/年,通用算力u1实例199元/年。这几款特价云服务器的价格已经是价格底线,不可叠加优惠券。如果是选购其他实例规格的云服务器,用户仍可通过领取学生无门槛券、企业AI算力券、新人满减券等优惠券实现折上折,同时建议关注组合购套餐、长期预付费优惠及大型活动节点,并根据实际业务需求精准匹配产品规格,从而在性能与成本间找到最优解。
|
4月前
|
人工智能 运维 安全
2026技术迭代新风向:系统开发与运维迈入智能融合新阶段
2026年,系统开发与运维加速迈向智能化、轻量化、安全化与自主化:云原生渗透率达65%–75%,Serverless支持生产级应用;AIOps实现故障预判与自动修复;Rust/Go崛起,低代码+AI编程普及;GitOps与DevSecOps成标配;FinOps与精细化安全管控全面落地。
771 1
|
8月前
|
人工智能 安全 程序员
OpenClaw之父:代码已死,意图永生——AI时代开发范式的颠覆性革命
奥地利程序员彼得·斯坦伯格于2026年初推出GitHub史上增长最快的开源项目OpenClaw,提出“代码已死,意图永生”,引发全球开发者对编程本质的深刻反思。AI正推动开发范式从写码转向定义意图,人类角色升维为需求艺术家、系统诗人与体验工匠。
|
Java API 开发者
Spring 控制反转与依赖注入:从玄学编程到科学管理
在传统开发中,手动`new`对象导致紧耦合、难以维护和测试。控制反转(IoC)将对象创建交给框架,实现解耦。Spring通过IOC容器自动管理对象生命周期,开发者只需声明依赖,无需关心创建细节。依赖注入(DI)是IoC的具体实现方式,支持构造器、Setter和字段注入。构造器注入推荐使用,保证依赖不可变且易于测试。对于多个同类型Bean,可用`@Qualifier`或`@Primary`解决冲突。此外,Spring还支持依赖查找(DL),开发者主动从容器获取Bean,适用于动态场景,但侵入性强。掌握IoC与DI,有助于构建灵活、可维护的Spring应用。
|
8月前
|
数据采集 监控 机器人
实战!用Scrapy+Flask构建京东商品比价微信机器人
本项目是一个基于微信的京东智能比价机器人,集成Scrapy+Selenium爬虫、Flask API与itchat/Wechaty微信服务,支持商品搜索、实时比价、30天价格趋势分析、降价自动预警及收藏管理,全栈可部署(Docker+Nginx),助力用户省钱决策。(239字)
|
Kubernetes Java 微服务
Spring Boot 单体应用一键升级成 Spring Cloud Alibaba(1)
Spring Boot 单体应用一键升级成 Spring Cloud Alibaba(1)
426 0
Spring Boot 单体应用一键升级成 Spring Cloud Alibaba(1)
|
安全 网络协议 5G
|
存储 JavaScript
js切割截取字符串方法
js切割截取字符串方法
610 2

热门文章

最新文章