⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpuid.h

📁 获取CPU信息的类
💻 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 + -