利用利用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 汇编指令(转载)相关推荐

  1. GNU ARM 汇编指令[转载]

    http://blog.sina.com.cn/s/blog_59b189220100au1k.html 第一部分 Linux下ARM汇编语法尽管在Linux下使用C或C++编写程序很方便,但汇编源程 ...

  2. 如何测量两组汇编指令的执行效率

    本文是纯干货. 由于现代的处理器支持乱序执行代码,另一个说法叫做cpu指令重拍.为了测量的准确性,本例中使用了cpuid指令,属于序列化指令.它可以保证汇编指令的执行的有序性.用来避免cpu指令重拍. ...

  3. 转载——8086汇编指令与机器码的相互转换

    汇编指令与机器码的相互转换  贴子发表于:2008-10-28 12:48:03 机器语言我们只要重点理解一下几个概念: 1. 机器语言指令有操作码(OP)和地址码两部分组成 |___________ ...

  4. 32位汇编寄存器及汇编指令

    32位CPU所含有的寄存器有: 4个数据寄存器(EAX.EBX.ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES.CS.SS.DS.FS和 ...

  5. 实验1 查看CPU和内存、用机器指令和汇编指令编程

     实验任务 一.使用Debug,用E命令和A命令以两种方式将指令写入内存 机器码        汇编指令 b8 20 4e     mov ax,4E20H 05 16 14     add ax,1 ...

  6. 8086 汇编指令手册查询(转)

    8086 汇编指令手册查询,编语言是一种面向机器的语言.它能够利用计算机所在硬件性并能直接控制硬件,在微型计算机系统的开发应用和过程控制和特别受到重视. 一.数据传输指令 -------------- ...

  7. Windows内核 基本汇编指令

    1)用VS2010新建Win32 Console Application,工程名为ACECore,工程建立完成后得到打开文件ACECore.cpp,代码如下: #include "stdaf ...

  8. 了解计算机指令和汇编指令

    了解计算机指令和汇编指令 用a指令写入内存: 出现了错误 感觉用a的命令输入 不再是数字进制的形式 比较贴合人类自然语言.其次就是当前内存单元错误的话,是会持续报错的,这样就可以一直修改.直到对为止, ...

  9. 用机器指令和汇编指令编程(修改版)

    实验名称 用机器指令和汇编指令编程(1) 实验日期   2018.10.22 学院:计软院 专业:计算机科学与技术 年级:2017级 班次:5班 姓名:陈奕明 学号 20171308194 一.实验目 ...

最新文章

  1. 关于学习Python的一点学习总结(28->收集参数及分配参数)
  2. php传输html乱码解决
  3. python中importlib模块安装_importlib模块
  4. 112. Path Sum 路径总和
  5. Golang系列:打印命令行参数
  6. 小米bl未解锁变砖了如何刷机_如何安装MIUI 10
  7. Virbox Compiler -跨平台编译器——实现源代码编译过程的加密
  8. Linux 邮件服务器 之跟我一步一步来实现一个邮件系统
  9. python 鼠标 自动点击_Python实现鼠标隔几秒自动点击电脑某区域
  10. 百科人物爬虫-属性解析
  11. 接入新浪微博第三方登录
  12. 地图上如何量方位角_地图北与方位角
  13. Android intent.Action 参数值及对应功能介绍(转)
  14. python 字节码 汇编器_基础系列1-python解释器、PVM、源代码、字节码理解
  15. Intel汇编-LOOP循环检查ECX含零值
  16. 软件测试的工作流程是什么?
  17. 音视频技术开发周刊 | 277
  18. onkeypress 、onkeyup 与onkeydown三者之间的区别
  19. 图神经网络用于RNA-蛋白质相互作用的新预测
  20. nacos发送beat逻辑

热门文章

  1. 服务器常规维修与判断方法,服务器常规维修与判断方法88119.doc
  2. java system datetime_Java8新特性时间日期库DateTime API及示例
  3. c语言字符串反转栈,【C语言】利用栈将数组中字符串逆序
  4. svn: E155036: Please see the ‘svn upgrade‘
  5. 找不到ad用户和计算机,清理可能废弃的AD用户和计算机账户
  6. 用jframe给MySQL输入数据_如何从JTextField输入Info到sql数据库?
  7. c语言转换为python语言_使用C语言中的数据缓冲区和NumPy数组之间的转换来为Python接口打包C程序的最佳方法是什么?...
  8. 计算机编程关键字一,和计算机编程有关的101条伟大的名言
  9. 直接在电脑屏幕上画画_电脑屏幕保护膜有那些你知道吗?
  10. map--Bit Compression