求:C语言编程获得CPU类型(WINDOWS或LUNUX)

发布于 2022-09-29 16:16:12 字数 58 浏览 21 评论 0

最近想深入学习一下LINUX操作系统,现在遇到的第一个问题是编程获得CPU类型。但是还不太清楚思路,请大家指导一下。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

埖埖迣鎅 2022-10-06 16:16:12

内嵌汇编指令码? cpuid?

挽袖吟 2022-10-06 16:16:12

#include<stdio.h>

unsigned int veax;
unsigned int vebx;
unsigned int vedx;
unsigned int vecx;
//执行CPUID指令
void cpuid(unsigned int veax1)
{
        _asm{
             mov eax,veax1
                 cpuid
                 mov veax,eax
                 mov vebx,ebx
                 mov vecx,ecx
                 mov vedx,edx
        }
}

//做移位操作,把寄存器中的ASCII码,以字符形式输出
void LeftMove(unsigned int var)
{
  printf("%c",var);
  for(int i=0;i<3;i++)
  {
  var=(var>>;
  printf("%c",var);
  }
}

//做移位操作,把寄存器中的值以“%d”形式输出
void LM(unsigned int var)
{
  printf("%d",var);
  for(int i=0;i<3;i++)
  {
  var=(var>>;
  printf("%d",var);
  }
}

//得到CPU的生产厂商(当EAX值为0时),依次存放在EBX,EDX,ECX中
void getCpuName()
{
  cpuid(0);
  LeftMove(vebx);
  LeftMove(vedx);
  LeftMove(vecx);
  printf("\n";
}

//得到CPU的商标,当EAX中的值为0x80000003和0x80000004时分别返回16个字符,组成商标
//依次存放在EAX,EBX,ECX,EDX中
void getCpuBrand()
{
  for(int j=0;j<2;j++)
  {
  cpuid(0x80000003+j);
  LeftMove(veax);
  LeftMove(vebx);
  LeftMove(vecx);
  LeftMove(vedx);
  }
  printf("\n";
}

//获得CPU的特性,参数是eax = 1,返回值放在edx和ecx,通过验证edx或者ecx的某一个bit,
//可以获得CPU的一个特性是否被支持。比如说,edx的bit 32代表是否支持MMX,
//edx的bit 28代表是否支持Hyper-Threading,ecx的bit 7代表是否支持speed sted。
void  getCpuFeature()
{//由于特性太多,无法一一编写,需要的时候再写,方法是一样的。
  
}

//获得CPU序列号,获得序列号需要两个步骤,首先用eax = 1做参数,返回的eax中存储序列号的高两个WORD。
//用eax = 3做参数,返回ecx和edx按从低位到高位的顺序存储前4个WORD。
void getCpuSeris()
{
cpuid(1);
LM(veax);
cpuid(3);
LM(vecx);
LM(vedx);
printf("\n";
}
void main()
{
  getCpuName();
  getCpuBrand();
  getCpuSeris();
}

爱她像谁 2022-10-06 16:16:12

顶下

南巷近海 2022-10-06 16:16:12

只能内嵌汇编
或者自己做个库进行支持

温柔一刀 2022-10-06 16:16:12

可以看看/proc/cpuinfo有没有你想要的信息

著墨染雨君画夕 2022-10-06 16:16:12

支持一下
学到东西了

[ 本帖最后由 PiscesSTAR 于 2007-7-24 16:29 编辑 ]

来日方长 2022-10-06 16:16:12

嵌入cpuid指令也有不好的地方,不好跨不同种类的CPU,而这点违背了UNIX的原则
不过话说回来,真的想做到最好的可移植性还是分支编译比较好

狼亦尘 2022-10-06 16:16:12

Intel Processor Identification and the CPUID Instruction.pdf

瀞厅☆埖开 2022-10-06 16:16:12

其它实现IA32/x64的CPU vendor,也是要提供同样语义的cpuid指令的。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文