如何用VC++获取CPUID,用win32控制台程序写

a988041 2012-01-10 08:23:44
如何用VC++获取CPUID,用win32控制台程序写?查了好多资料都是用到嵌入汇编,但是我们写完后要改成ARM平台下的应用程序,__asm这句开始编译不通过,求教。最好能用API函数
...全文
466 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ginie 2012-01-11
  • 打赏
  • 举报
回复

// ***获取CPUID号***************************
int nTime [ 2 ];
int nCPUClock;
_asm
{
rdtsc
mov nTime[ 0 ], edx
mov nTime[ 1 ], eax
}
Sleep(1000);
_asm
{
rdtsc
sub eax, nTime[ 1 ]
sub edx, nTime[ 0 ]
mov nCPUClock, eax
}

CString str;
str.Format( "%dMHz", nCPUClock / 1000000 );
//AfxMessageBox(str);
CString CPUID;

unsigned long s1,s2;
unsigned char vendor_id[]="------------";
char sel;
sel='1';
CString VernderID;
CString MyCpuID,CPUID1,CPUID2;
switch(sel)
{
case '1':
__asm{
xor eax,eax
cpuid
mov dword ptr vendor_id,ebx
mov dword ptr vendor_id[+4],edx
mov dword ptr vendor_id[+8],ecx
}
VernderID.Format("%s-",vendor_id);
__asm{
mov eax,01h
xor edx,edx
cpuid
mov s1,edx
mov s2,eax
}
CPUID1.Format("%08X%08X",s1,s2);
__asm{
mov eax,03h
xor ecx,ecx
xor edx,edx
cpuid
mov s1,edx
mov s2,ecx
}
CPUID2.Format("%08X%08X",s1,s2);
break;
case '2':
{
__asm{
mov ecx,119h
rdmsr
or eax,00200000h
wrmsr
}
}
AfxMessageBox("CPU id is disabled.");
break;
}
MyCpuID = CPUID1+CPUID2;
CPUID = MyCpuID;
return CPUID;
//************************************************
fly4free 2012-01-11
  • 打赏
  • 举报
回复
要不你找ARM平台的硬件spec?

貌似ms不支持这个东西吧?
__cpuid也只是 VS2008以后才支持的
a988041 2012-01-10
  • 打赏
  • 举报
回复
我用的是vs2011,我知道__couid可以再win32控制台程序上用,但是换做ARM平台的就编译不过了[Quote=引用 7 楼 fight_in_dl 的回复:]
vs2005以后的版本可以使用__cpuid函数获取CPU信息,详细可参考:
http://msdn.microsoft.com/en-us/library/hskdteyh(v=VS.80).aspx
[/Quote]
战在春秋 2012-01-10
  • 打赏
  • 举报
回复
vs2005以后的版本可以使用__cpuid函数获取CPU信息,详细可参考:
http://msdn.microsoft.com/en-us/library/hskdteyh(v=VS.80).aspx
a988041 2012-01-10
  • 打赏
  • 举报
回复
太感谢啦,很有用的知识啊[Quote=引用 4 楼 visualeleven 的回复:]
http://blog.csdn.net/alien75/article/details/5854530
[/Quote]
a988041 2012-01-10
  • 打赏
  • 举报
回复
在VS11上用win32 控制台程序写,然后转移到ARM平台上[Quote=引用 3 楼 zgl7903 的回复:]
引用 2 楼 a988041 的回复:
对不起哈,刚开始工作,很多都不清楚,我们写的是vs11上的win32 console 应用程序,然后编译成ARM架构的下的,因为要做win8测试,只是定义这样一个头文件就可以了吗?

引用 1 楼 zgl7903 的回复:
引用楼主 a988041 的回复:
如何用VC++获取CPUID,用win32控制台程序写?查了好多资料都是用到嵌入汇编,但是……
[/Quote]
Eleven 2012-01-10
  • 打赏
  • 举报
回复
http://blog.csdn.net/alien75/article/details/5854530
zgl7903 2012-01-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 a988041 的回复:]
对不起哈,刚开始工作,很多都不清楚,我们写的是vs11上的win32 console 应用程序,然后编译成ARM架构的下的,因为要做win8测试,只是定义这样一个头文件就可以了吗?

引用 1 楼 zgl7903 的回复:
引用楼主 a988041 的回复:
如何用VC++获取CPUID,用win32控制台程序写?查了好多资料都是用到嵌入汇编,但是我们写完后要改成ARM平台下的应用程序,_……
[/Quote]
也就是你的ARM平台下不做CPUID的检测
a988041 2012-01-10
  • 打赏
  • 举报
回复
对不起哈,刚开始工作,很多都不清楚,我们写的是vs11上的win32 console 应用程序,然后编译成ARM架构的下的,因为要做win8测试,只是定义这样一个头文件就可以了吗?[Quote=引用 1 楼 zgl7903 的回复:]
引用楼主 a988041 的回复:
如何用VC++获取CPUID,用win32控制台程序写?查了好多资料都是用到嵌入汇编,但是我们写完后要改成ARM平台下的应用程序,__asm这句开始编译不通过,求教。最好能用API函数


这个本身就是硬件相关的,可以用宏定义控制控制你的硬件平台
比如
#ifndef _X86
#define cpuid()//
#endif
[/Quote]
zgl7903 2012-01-10
  • 打赏
  • 举报
回复
[Quote=引用楼主 a988041 的回复:]
如何用VC++获取CPUID,用win32控制台程序写?查了好多资料都是用到嵌入汇编,但是我们写完后要改成ARM平台下的应用程序,__asm这句开始编译不通过,求教。最好能用API函数
[/Quote]

这个本身就是硬件相关的,可以用宏定义控制控制你的硬件平台
比如
#ifndef _X86
#define cpuid()//
#endif

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧