初学汇编之CPU类型识别
来源:互联网 发布:淘宝是如何盈利的 编辑:程序博客网 时间:2024/06/06 03:23
http://www.cppblog.com/Jedimaster/archive/2006/08/18/11423.html
为了以后优化算法,还是硬着头皮学了一下汇编,也就是C\C++与汇编的混合编程,帖一个类的代码,非常简单的东西,觉得还可以优化。识别CPU的型号,使用了Intel的CPUID指令,还没有来得及看AMD的资料,以后有空了我也做一个类似于CPUID一样的小工具呵呵。
class CIntelCpuInfo{private: DWORD m_VersionInfo; DWORD m_Features; void GetFeatures(); void GetVersionInfo();public: CIntelCpuInfo() {}; ~CIntelCpuInfo() {}; void Show();};void CIntelCpuInfo::Show(){ this->GetVersionInfo(); this->GetFeatures();};void CIntelCpuInfo::GetVersionInfo(){ DWORD VER; DWORD BACKUP; DWORD STEP,MODEL,FAMILY; __asm{ MOV EAX,01H; CPUID; MOV VER,EAX; MOV BACKUP,EAX; AND EAX,0000000FH; MOV STEP,EAX; MOV EAX,BACKUP; SHR EAX,4; AND EAX,0000000FH; MOV MODEL,EAX; MOV EAX,BACKUP; SHR EAX,8; AND EAX,0000000FH; MOV FAMILY,EAX; }; cout<<"Family ID : "<<FAMILY<<" Stepping ID : "<<STEP<<" Model : "<<MODEL<<endl;};void CIntelCpuInfo::GetFeatures(){ DWORD C,D; DWORD SSE3Tag; DWORD SSTEPTag; DWORD SSE2Tag; DWORD SSE1Tag; DWORD MMXTag; __asm{ MOV EAX,01H; CPUID; MOV C,ECX; PUSH ECX; AND ECX,01H; MOV SSE3Tag,ECX; POP ECX; AND ECX,0080H; MOV SSTEPTag,ECX; SHR SSTEPTag,7; MOV D,EDX; SHR EDX,23; PUSH EDX; PUSH EDX; AND EDX,01H; MOV MMXTag,EDX; POP EDX; SHR EDX,2; AND EDX,01H; MOV SSE1Tag,EDX; POP EDX; SHR EDX,3; AND EDX,01H; MOV SSE2Tag,EDX; }; cout<<"SSE3 Support ? "<<SSE3Tag<<endl; cout<<"SSE2 Support ? "<<SSE2Tag<<endl; cout<<"SSE1 Support ? "<<SSE1Tag<<endl; cout<<"Enhanced SpeedStepping ? "<<SSTEPTag<<endl;};
我的CPU是2002年下半年的,Intel Pentium 4 Northwood 1.8GA,嗬嗬,搞得多么先进一样。截图如下,
结果完全正确。有了一些经验,在以后的程序中,可以通过识别CPU类型进行额外的优化,以后好好的研究Intel的Manual。
- 初学汇编之CPU类型识别
- 初学汇编之笔记!
- 初学汇编之Debug命令
- Loki之类型识别
- 汇编学习之路之 8086CPU
- 初学汇编之第一个程序
- 初学JZ2440之GPIO汇编点灯
- 8086汇编初学之贪吃蛇
- 汇编之初学-如何编译链接-masm32汇编器
- 汇编初学
- 初学汇编
- 初学汇编
- 初学Java之基本类型
- 初学Java之基本类型
- JAVA初学之基本类型
- c++初学之变量类型
- CPU 频率之汇编计算法
- CPU类型在 VS下的宏识别
- Cyrus-SASL 安装
- hdu 4308 Saving Princess claire_ 广搜 多校联合赛第七题
- linux中如何重新获取丢失的密码
- POJ-2823单调队列
- CentOS下搭建DNS详细版
- 初学汇编之CPU类型识别
- 什么是SMTP协议?SMTP端口号是多少?什么是SMTP服务器?免费smtp服务器?
- 前端 _本地存储问题
- Oracle中关于查看角色与角色间权限的差异的SQL语句
- listview android:cacheColorHint,android:listSelector属性作用 .
- android:configChanges名词解析(文档翻译)
- 为何邮件的收件人是undisclosed-recipients?如何避免?
- 认识自己是最难的
- c语言常见笔试编程题strcat和strchr