CPUID学习

CPUID实验

一、CPUID是什么:

百度百科:CPUID操作码是一个面向x86架构的处理器补充指令,它的名称派生自CPU识别,作用是允许软件发现处理器的详细信息。它由英特尔在1993年引入奔腾和SL增强486处理器。 通过使用CPUID操作码,软件可以确定处理器的类型和特性支持(例如MMX/SSE)。CPUID操作码为0Fh、A2h(双字节形式,A20Fh为单字(word))形式,值位于EAX寄存器中,某些情况下ECX寄存器用于指定要返回的信息。

信息提炼:是intel推出的用于CPU信息识别的操作码。

二、找到cpuid的操作手册:经过关键词搜索cpuid似乎并不能找到完整的操作手册,于是更换搜索方向,只要找到intel的开发手册就可以间接的找到cpuid的操作手册。经过搜索,在以下地址可以下载intel的开发手册:

Intel® 64 and IA-32 Architectures Software Developer Manuals

下载手册到本地

打开手册并搜索关键词cpuid,经过一番尝试在卷2中找到cpuid的操作手册

三、熟悉cpuid的数据手册

由以下描述信息可以知道该指令是用来读取处理器的各种标识和特性信息,并将指令执行完后返回的信息保存在 EAX, EBX, ECX,和 EDX 寄存器中。

由以下描述信息可以知道EFLAGS寄存器的bit21位表明处理器是否支持CPUID指令,如果可以设置或者清除该标志位,那么代表处理器支持CPUID指令。

由以下描述信息可以知道CPUID指令有两组功能:一组返回的是基本信息,另一组返回的是扩展信息。

以下为cpuid指令返回信息的部分相关描述(功能太多,这里截取的是部分)

由以下介绍信息可以知道当给EAX寄存器赋值0时,它可以返回cpu的基本信息,对于Intel处理器,该字符串为" GenuineIntel ",并表示为:

四、实际操作

①在真实的dos环境下利用debug进行测试:

  1. 在eax中写入0,然后执行cpuid,之后可以看到

EBX=756E6547  ECX=6C65746E  EDX=49656E69与数据手册上一致

  1. 在eax中写入80000002h,然后执行cpuid,之后可以看到

EAX=65746E49  EBX=2952286C  ECX=726F4320  EDX=4D542865

在eax中写入80000003h,然后执行cpuid,之后可以看到

EAX=33692029  EBX=3130312D  ECX=43203030  EDX=40205550

在eax中写入80000004h,然后执行cpuid,之后可以看到

EAX=362E3320  EBX=7A484730  ECX=00000000  EDX=00000000

由数据手册可得,80000002h, 80000003h, 80000004h返回处理器名称/商标字符串

将EAX,EBX,ECX,EDX中的数据用ASCII码表示可得商标字符串。

②编程进行cpuid的读写

  • 参考数据手册

  • 写出对应的代码

其中EAX中的数据表示Maximum Input Value for Basic CPUID Information

EBX,ECX,EDX结合起来存CPU的品牌名。

  1. 参考数据手册

  1. 写出对应的代码

其中 eax中存放的是CPU的基本信息,包括版本,类型,步进ID等,ECX和EDX中存放的是特征信息。

  1. 参考数据手册

  1. 写出对应代码:

这里用一个数组来存放TLB相关信息。

  1. 参考数据手册

  1. 写出对应代码

  • 参考数据手册

  • 写出对应代码

0x80000002, 0x80000003, 0x80000004都是用来存 Processor Brand String,这里定义一个大的数组processor_brand来存。

最后将获得的信息进行打印输出

在实际的DOS环境中将代码进行运行,成功的进行了打印输出。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值