利用CPUID 汇编指令(转载)
利用利用CPUID 汇编指令(机器码:0FH A2H, 如果你的编译器不支持CPUID 指令,只有emit 机器码了), 该指令可以被如下CPU识别:
Intel 486 以上的CPU,
Cyrix M1 以上的CPU,
AMD Am486 以上的CPU
(1) 取CPU OEM 字符串, 判断CPU 厂商
先让EAX=0, 再调用CPUID
Inel的CPU将返回:
EBX:756E6547H 'Genu' EDX:49656E69H 'ineI' ECX:6C65746EH 'ntel' EBX,EDX,ECX 将连成"GenuineIntel", 真正的Intel。 |
Cyrix 的CPU 将返回:
EBX:43797269H EDX:78496E73H ECX:74656164H "CyrixInstead","Cyrix 来代替"。 |
AMD 的CPU 将返回:
EBX:41757468H EDX:656E7469H ECX:63414D44H "AuthenticAMD", 可信的AMD。 |
在Windows98中,用右键单击"我的电脑",选择" 属性- 常规"在计算机描述 处就可看见CPU OEM 字符串。
(2)CPU 到底是几86, 是否支持MMX
先让EAX=1,再调用CPUID
EAX的8到11位就表明是几86
3 - 386
4 - i486
5 - Pentium
6 - Pentium Pro Pentium II
2 - Dual Processors
EDX 的第0位:有无FPU
EDX的第23位:CPU是否支持IA MMX,很重要啊 !如果你想用那57条新增的指 令,先检查这一位吧,否则就等着看Windows 的"该程序执行了非法指令,将被关 闭" 吧。
(3) 专门检测是否P6架构
先让EAX=1,再调用CPUID
如果AL=1,就是Pentium Pro 或Pentium II
(4) 专门检测AMD的CPU信息
先让EAX=80000001H,再调用CPUID
如果EAX=51H, 是AMD K5
如 果EAX=66H, 是K6
EDX第0 位: 是否有FPU( 多余的 !谁用过没FPU的K5,K6?)
EDX 第23 位,CPU是否支持MMX,
程序如下:
//------CPUID Instruction Demo Program------------
#include
#include
#pragma hdrstop
//------------------------------------------------
#pragma inline
#pragma argsused
int main(int argc, char **argv)
{
char OEMString[13];
int iEAXValue,iEBXValue,iECXValue,iEDXValue;
_asm {
mov eax,0
cpuid
mov DWORD PTR OEMString,ebx
mov DWORD PTR OEMString 4,edx
mov DWORD PTR OEMString 8,ecx
mov BYTE PTR OEMString 12,0
}
cout< < "This CPU 's OEM String is:"< < OEMString< < endl;
_asm {
mov eax,1
cpuid
mov iEAXValue,eax
mov iEBXValue,ebx
mov iECXValue,ecx
mov iEDXValue,edx
}
if(iEDXValue&0x800000)
cout < < "This is MMX CPU"< < endl;
else
cout < < "None MMX Support."< < endl;
int iCPUFamily=(0xf00 & iEAXValue) > >8;
cout < < "CPU Family is:"< < iCPUFamily< < endl;
_asm{
mov eax,2
CPUID
}
if(_AL==1)
cout < < "Pentium Pro or Pentium II Found";
getch();
return 0;
}
转载于:https://www.cnblogs.com/DxSoft/articles/5053964.html
利用CPUID 汇编指令(转载)相关推荐
- GNU ARM 汇编指令[转载]
http://blog.sina.com.cn/s/blog_59b189220100au1k.html 第一部分 Linux下ARM汇编语法尽管在Linux下使用C或C++编写程序很方便,但汇编源程 ...
- 如何测量两组汇编指令的执行效率
本文是纯干货. 由于现代的处理器支持乱序执行代码,另一个说法叫做cpu指令重拍.为了测量的准确性,本例中使用了cpuid指令,属于序列化指令.它可以保证汇编指令的执行的有序性.用来避免cpu指令重拍. ...
- 转载——8086汇编指令与机器码的相互转换
汇编指令与机器码的相互转换 贴子发表于:2008-10-28 12:48:03 机器语言我们只要重点理解一下几个概念: 1. 机器语言指令有操作码(OP)和地址码两部分组成 |___________ ...
- 32位汇编寄存器及汇编指令
32位CPU所含有的寄存器有: 4个数据寄存器(EAX.EBX.ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES.CS.SS.DS.FS和 ...
- 实验1 查看CPU和内存、用机器指令和汇编指令编程
实验任务 一.使用Debug,用E命令和A命令以两种方式将指令写入内存 机器码 汇编指令 b8 20 4e mov ax,4E20H 05 16 14 add ax,1 ...
- 8086 汇编指令手册查询(转)
8086 汇编指令手册查询,编语言是一种面向机器的语言.它能够利用计算机所在硬件性并能直接控制硬件,在微型计算机系统的开发应用和过程控制和特别受到重视. 一.数据传输指令 -------------- ...
- Windows内核 基本汇编指令
1)用VS2010新建Win32 Console Application,工程名为ACECore,工程建立完成后得到打开文件ACECore.cpp,代码如下: #include "stdaf ...
- 了解计算机指令和汇编指令
了解计算机指令和汇编指令 用a指令写入内存: 出现了错误 感觉用a的命令输入 不再是数字进制的形式 比较贴合人类自然语言.其次就是当前内存单元错误的话,是会持续报错的,这样就可以一直修改.直到对为止, ...
- 用机器指令和汇编指令编程(修改版)
实验名称 用机器指令和汇编指令编程(1) 实验日期 2018.10.22 学院:计软院 专业:计算机科学与技术 年级:2017级 班次:5班 姓名:陈奕明 学号 20171308194 一.实验目 ...
最新文章
- 关于学习Python的一点学习总结(28->收集参数及分配参数)
- php传输html乱码解决
- python中importlib模块安装_importlib模块
- 112. Path Sum 路径总和
- Golang系列:打印命令行参数
- 小米bl未解锁变砖了如何刷机_如何安装MIUI 10
- Virbox Compiler -跨平台编译器——实现源代码编译过程的加密
- Linux 邮件服务器 之跟我一步一步来实现一个邮件系统
- python 鼠标 自动点击_Python实现鼠标隔几秒自动点击电脑某区域
- 百科人物爬虫-属性解析
- 接入新浪微博第三方登录
- 地图上如何量方位角_地图北与方位角
- Android intent.Action 参数值及对应功能介绍(转)
- python 字节码 汇编器_基础系列1-python解释器、PVM、源代码、字节码理解
- Intel汇编-LOOP循环检查ECX含零值
- 软件测试的工作流程是什么?
- 音视频技术开发周刊 | 277
- onkeypress 、onkeyup 与onkeydown三者之间的区别
- 图神经网络用于RNA-蛋白质相互作用的新预测
- nacos发送beat逻辑
热门文章
- 服务器常规维修与判断方法,服务器常规维修与判断方法88119.doc
- java system datetime_Java8新特性时间日期库DateTime API及示例
- c语言字符串反转栈,【C语言】利用栈将数组中字符串逆序
- svn: E155036: Please see the ‘svn upgrade‘
- 找不到ad用户和计算机,清理可能废弃的AD用户和计算机账户
- 用jframe给MySQL输入数据_如何从JTextField输入Info到sql数据库?
- c语言转换为python语言_使用C语言中的数据缓冲区和NumPy数组之间的转换来为Python接口打包C程序的最佳方法是什么?...
- 计算机编程关键字一,和计算机编程有关的101条伟大的名言
- 直接在电脑屏幕上画画_电脑屏幕保护膜有那些你知道吗?
- map--Bit Compression