|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
有人问干嘛要用内嵌呢?直接用纯汇编不好吗?我想说,取到CPU的信息不可以直接用!必须要进行加工处理,汇编写起来很麻烦。
核心指令:CPUID
用EAX传入参数,表示要取那些信息。
代码如下:
- #include<stdio.h>
- #include<math.h>
- void main()
- {
- //取CPU品牌
- char cpup[13];
- _asm{
- xor eax,eax
- CPUID //取信息
- mov dword ptr cpup,EBX
- mov dword ptr cpup[4],EDX
- mov dword ptr cpup[8],ECX
- }
- cpup[12]='\0';
- printf("%s\n",cpup);
- //获取型号 几86
- int CpuTy=0;
- int _EDX=0;
- _asm{
- mov eax,1
- CPUID
- and eax,00000000000000000000001110000000b //提取出8-11位
- mov CpuTy,eax
- mov _EDX,edx;
- }
- CpuTy=CpuTy>>7; //收拾残局 后面还有很多‘0’;
- switch(CpuTy)
- {
- case 2:printf("Dual Processors\n");break;
- case 3:printf("386");break;
- case 4:printf("i486\n");break;
- case 5:printf("Pentium\n");break;
- case 6:printf("Pentium Pro Pentium II\n");break;
- default:printf("NOT!!!!!\n");
- }
- if(!((bool)abs(_EDX>>31)))
- {
- printf("NOT FPU\n");
- }else
- {
- printf("FPU\n");
- }
- //判断是否支持 MMX指令!
- _asm
- {
- mov eax,_EDX
- and eax,00000000010000000000000000000000b //提取出地23位
- mov _EDX,eax
- }
- if((bool)(_EDX>>22))
- {
- printf("IA MMX\n");
- }else
- {
- printf("NOT IA MMX\n");
- }
- //电源管理检查
- _asm
- {
- mov eax, 80000007h
- cpuid
- and EDX,00000000000000000000000010000000b
- mov _EDX,EDX
- }
- if((bool)(_EDX>>7))
- {
- printf("支持电源管理的CPU!");
- }else
- {
- printf("不支持电源管理的CPU!");
- }
- }
复制代码 这里只是抛砖引玉,CPUID的功能非常强大,这里只是列出了一些简单的功能,像缓存,虚拟地址大小,处理器序列号之类的都没写出来。
回帖即可获取详细资料
|
|