简介

首先,这里要讲的不是https://www.cpuid.com/ <https://www.cpuid.com/>里面的CPUID。

这里说的CPUID是x86平台的一条指令。


这条指令用来标记当前x86平台CPU的详细信息,因为x86平台经历了N代,每一代都会有新的特性,在做开发的时候需要确定当前的特性是否可以在这个CPU中使用,这就需要通过这个指令来确定。

CPUID指令是在奔腾处理器(1993年)上引入的,更早之前的CPU就没有办法了。

 

格式

以下是EDK中包含的CPUID访问的函数:

;------------------------------------------------------------------------------
; VOID ; EfiCpuid ( ; IN UINT32 RegisterInEax, // rcx ; OUT EFI_CPUID_REGISTER
*Reg OPTIONAL // rdx ; )
;------------------------------------------------------------------------------
EfiCpuid PROC PUBLIC push rbx mov r8, rdx ; r8 = *Reg mov rax, rcx ;
RegisterInEax cpuid cmp r8, 0 je _Exit mov [r8 + 0], eax ; Reg->RegEax mov [r8
+ 4], ebx ; Reg->RegEbx mov [r8 + 8], ecx ; Reg->RegEcx mov [r8 + 12], edx ;
Reg->RegEdx _Exit: pop rbx ret EfiCpuid ENDP
可以看到cpuid指令接受一个参数(在EAX中),并返回4个值,分别在EAX/EBX/ECX/EDX中。

在《Intel开发者手册》中通过如下的格式来表示:



上图的例子中传入参数是01H,返回的值有EDX中存在有效值,它的BIT25表示SSE的支持。

 

具体参数说明

CPUID指令的使用很简单,重点只在于输入输出参数的含义,这个在《Intel开发者手册》第二卷中有详细的说明。

以之前的图为例。

EAX的值是01H,对应的说明如下:


而EDX的值如下:



 

以上是对CPUID指令的简单介绍。

 

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信