在Visual C++编程中如何取得CPU的信息

供稿:hz-xin.com     日期:2025-01-17
利用利用CPUID 汇编指令(机器码:0FH A2H, 如果你的编译器不支持CPUID 指令,只有emit 机器码了), 该指令可以被如下CPU识别:
Intel 486 以上的CPU,
Cyrix M1 以上的CPU,
AMD Am486 以上的CPU
(1) 取CPU OEM 字符串, 判断CPU 厂商
先让EAX=0, 再调用CPUID
Inel的CPU将返回:
EBX:756E6547H 'Genu'
EDX:49656E69H 'ineI'
ECX:6C65746EH 'ntel'
EBX,EDX,ECX 将连成"GenuineIntel", 真正的Intel。
Cyrix 的CPU 将返回:
EBX:43797269H
EDX:78496E73H
ECX:74656164H
"CyrixInstead","Cyrix 来代替"。
AMD 的CPU 将返回:
EBX:41757468H
EDX:656E7469H
ECX:63414D44H
"AuthenticAMD", 可信的AMD。
在Windows98中,用右键单击"我的电脑",选择" 属性- 常规"在计算机描述 处就可看见CPU OEM 字符串。
(2)CPU 到底是几86, 是否支持MMX
先让EAX=1,再调用CPUID
EAX的8到11位就表明是几86
3 - 386
4 - i486
5 - Pentium
6 - Pentium Pro Pentium II
2 - Dual Processors
EDX 的第0位:有无FPU
EDX的第23位:CPU是否支持IA MMX,很重要啊 !如果你想用那57条新增的指 令,先检查这一位吧,否则就等着看Windows 的"该程序执行了非法指令,将被关 闭" 吧。
(3) 专门检测是否P6架构
先让EAX=1,再调用CPUID
如果AL=1,就是Pentium Pro 或Pentium II
(4) 专门检测AMD的CPU信息
先让EAX=80000001H,再调用CPUID
如果EAX=51H, 是AMD K5
如 果EAX=66H, 是K6
EDX第0 位: 是否有FPU( 多余的 !谁用过没FPU的K5,K6?)
EDX 第23 位,CPU是否支持MMX,
程序如下:
//------CPUID Instruction Demo Program------------
#include
#include
#pragma hdrstop
//------------------------------------------------
#pragma inline
#pragma argsused
int main(int argc, char **argv)
{
char OEMString[13];
int iEAXValue,iEBXValue,iECXValue,iEDXValue;
_asm {
mov eax,0
cpuid
mov DWORD PTR OEMString,ebx
mov DWORD PTR OEMString+4,edx
mov DWORD PTR OEMString+8,ecx
mov BYTE PTR OEMString+12,0
}
cout "This CPU 's OEM String is:" OEMString endl;
_asm {
mov eax,1
cpuid
mov iEAXValue,eax
mov iEBXValue,ebx
mov iECXValue,ecx
mov iEDXValue,edx
}
if(iEDXValue0x800000)
cout "This is MMX CPU" endl;
else
cout "None MMX Support." endl;
int iCPUFamily=(0xf00 iEAXValue) 8;
cout "CPU Family is:" iCPUFamily endl;
_asm{
mov eax,2
CPUID
}
if(_AL==1)
cout "Pentium Pro or Pentium II Found";
getch();
return 0;
}

如何获取本机MAC地址 和 IP
结束语 以上三种方法均在Visual C++ 6.0、Windows2000 环境下编译通过并工作正常。需要说明的是,示例程序只是提供了一种解决问题的思路,从软件工程的角度来看,有些不尽人意的地方,读者可以根据自己的编程需要进行修改。5,获取IP void CheckIP(void){ WSADATA wsaData;char name[155];char *ip;...

c语言编程中我用vissual c++编程,设i=2 k=(++i)+(++i)+(++i) 为什么...
不同编译器不同,我的vs2005结果是15 按你这个结果应该是这样的:等式右端执行步骤 第1步:++i 得i=3 第2步:++i 得i=4 第3步:i+i=4+4=8 第4步:++i得i=5 第5步:8+i=8+5=13

C++中怎么才可以将.cpp
在C++编程中,要将源代码文件从.cpp转换成可执行文件,你可以按照以下步骤进行操作:首先,启动你的C++编辑器,例如Visual Studio或Code::Blocks,新建一个cpp文件,将你的程序源代码输入其中。接着,按下"构建"或"编译"按钮,这通常在"工程"或"构建"菜单中,选择相应的编译选项。编译器会检查并转换你...

Microsoft Visual C++ 6.0打开后怎么编程
在编辑完成后,你可以点击工具栏上的编译按钮来编译你的代码,编译过程中如果出现错误,Visual C++ 6.0会给出相应的错误提示信息,帮助你进行错误修正。编译无误后,可以点击运行按钮来执行你的程序,看看程序的运行效果是否符合预期。总的来说,使用Microsoft Visual C++ 6.0进行编程主要包括创建工程和...

Visual stdio 2008 与VC6.0中: #include<iostream.h>与using namespace...
具体来说,使用#include 会直接将整个std命名空间中的所有内容引入到当前作用域中,这样写代码时就不需要每次都加上std::前缀。然而,这种做法在现代C++编程中已不推荐使用,因为它可能导致命名冲突,并且与ISO标准库定义不符。相比之下,使用using namespace std;仅仅是在当前作用域内引入std命名空间,不...

如何批量获取一个文件夹下的文件属性,然后存入数据库
使用Visual C++编程,有如下方法进行文件操作: (1)使用标准C运行库函数,包括fopen、fclose、fseek等。 (2)使用Win16下的文件和目录操作函数,如lopen、lclose、lseek等。不过,在Win32下,这些函数主要是为了和Win16向后兼容。 (3)使用Win32下的文件和目录操作函数,如CreateFile,CopyFile,DeleteFile,FindNextFile,等等...

C++中怎么才可以将.cpp文件生成.exe文件?
在C++编程中,将源代码文件从.cpp转换为.exe可执行文件的步骤如下:首先,你需要在一款C++编辑器(如Visual Studio或Code::Blocks)中创建并编写你的源代码程序(1)。确保你的代码保存在一个.cpp文件中。接下来,使用编辑器的构建工具,通常可以在菜单栏找到"构建"选项,选择"编译"(2)。这将编译...

visual c++6.0怎么用
如下:1、双击桌面上的Visual C++6.0快捷图标,打开编程环境,在打开的界面中,单击“文件”菜单项。选择里面的子菜单“新建”,单击此项,得到如下图所示的选项卡:(也可以直接使用快捷键:Ctrl+N)。2、在打开的新建选项卡中,单击“文件”,然后选中“文件”选项卡中的“C++ source file”一栏,...

如何运用c++里的“__stdcall”?
__stdcall调用类型:这种调用方式仅通过堆栈来push和pop参数。在push参数时,遵循从右到左的顺序。“_stdcall”的作用:在C\/C++语言中,函数默认的调用约定是参数由右向左压入栈,由调用者负责清空栈。而FORTRAN、PASCAL、Visual BASIC等其他语言中的函数调用约定则有所不同,参数同样由右向左压入栈,...

C++编程实现输入10个数,输出最大值和最小值及其平均值。
1、首先在Visual Studio 2019中新建一个C语言文件,如下图所示。2、接着导入如下图所示的库文件,所需要的数学计算函数都在里面。3、然后运用scanf函数来接收用户输入的三个数字,如下图所示。4、接着利用逐个比较的方式计算三个数中的最大值,如下图所示。5、运行编写的C语言文件,会弹出如下图...