📄 cpuid.h
字号:
///////////////////////////////////////////////////////////////////////////
// 文 件 名: cpuid.h
// 功 能: 通过 cpuid 指令,获取 CPU 信息的头文件
// 编译环境: VC++ 6.0 (Windows XP SP2)
//
// 用 法: 1. 声明一个对象: CCPUID cpuid;
// 2. 运行功能函数: cpuid.Run();
// 3. 现在你就可以调用想要的数据了.
// 如处理器商标字符串: cpuid.sProcessorStr
//
// 作 者: boer
// bo_er@msn.com
// 日 期: 2007-8-15
//
// 参考资料: Intel(R) 64 and IA-32 Architectures
// Software Developer's Manual
// Volume 2A:
// Instruction Set Reference, A-M
// Order Number: 253666-023US
// May 2007(2007-3)
///////////////////////////////////////////////////////////////////////////
/*/////////////////////////////////////////////////////
说 明
CPUID 指令在VC中的用法:
_asm
{
mov eax, X // X 取以下的输入值
cpuid
mov Y, EAX // Y,Z... 表示将EAX,EBX,ECX,EDX中的值保存起来...
mov Z, EBX
...
}
-----------------------------------------
输入: EAX = 00H
输出: EAX = dwBaseMaxVal // Maximum input value for basic CPUID information
EBX, ECX, EDX = sFactory[13] // 处理器生产厂商信息
-----------------------------------------
输入: EAX = 01H
输出: EAX = dwVerInfo // Version information: Type, Family, Model, and Stepping ID
EBX = dwBaseFeatureInfo // Bits 7-0: Brand Index. Bits 15-8: CLFLUSH line size ...
ECX = dwExFeatureInfo // Extended feature information
EDX = dwFeatureInfo // Feature information
-----------------------------------------
输入: EAX = 02H
输出: EAX, EBX, ECX, EDX = dwCacheTLB[4] // Cache and TLB information
EAX : 0-- 7 Bit Instruction TLB
8--15 Bit Instruction TLB
16--23 Bit Data TLB
24--31 Bit Instruction TLB
EDX : 0-- 7 Bit 2nd level Cache
8--15 Bit 1st level Instruction
16--23 Bit Data TLB
24--31 Bit 1st level Data
-----------------------------------------
输入: EAX = 03H
输出: ECX, EDX = dwProcessorSN[2] // Processor serial number(Available in Pentium III processor only)
-----------------------------------------
输入: EAX = 80000000H
输出: EAX = dwExMaxValue // Maximum input value for Extended Function CPUID information
-----------------------------------------
输入: EAX = 80000001H
输出: EAX = dwExFeature // Extended Processor Signature and Extended Feature Bits
ECX =
EDX =
-----------------------------------------
输入: EAX = 80000002H -- 80000004H
输出: EAX, EBX, ECX, EDX = sProcessorStr[49] // Processor Brand String
......
具体信息请参考 <<Intel(R) 64 and IA-32 Architectures Software Developer's Manual>> Volume 2A
/////////////////////////////////////////////////////*/
#if !defined(_GET_CPU_INFOMATION_H_2007_8_)
#define _GET_CPU_INFOMATION_H_2007_8_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "windows.h"
class CCPUID
{
public:
BOOL bIsSupportCPUID, bMMX, bSSE, bSSE2, bSSE3, bSSSE3, bEST, bHTT, bIntel64;
unsigned long dwBaseMaxValue, dwExMaxValue; // Maxinum Input Value for Basic CPUID Information
unsigned long dwVerInfo; // Version Information: Type,Family,Model,Stepping ID
unsigned long dwBaseFeatureInfo, dwExFeatureInfo, dwFeatureInfo;
unsigned long dwCacheTLB[4], dwProcessorSN[2];
unsigned long dwExFeature;
char sFactory[13], sProcessorStr[49];
int iBrandIndex, iThreads, iCores;
struct VerInfo // 保存 Version information 的结构.
{
int iFamily;
int iModel;
int iSteppingID;
int iExFamily;
int iExModel;
}VI;
public:
void Run();
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -