x86架构——CPUID

简介首先,这里要讲的不是https://www.cpuid.com/里面的CPUID。这里说的CPUID是x86平台的一条指令。这条指令用来标记当前x86平台CPU的详细信息,因为x86平台经历了N代,每一代都会有新的特性,在做开发的时候需要确定当前的特性是否可以在这个CPU中使用,这就需要通过这个指令来确定。CPUID指令是在奔腾处理器(1993年)上引入的,更早之前的CPU就没有办法了。格式以...

x86架构——CPUID
简介

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

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

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

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

�格式

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

;------------------------------------------------------------------------------;  VOID;  EfiCpuid (; INUINT32  RegisterInEax, // rcx; OUT  EFI_CPUID_REGISTER  *Reg  OPTIONAL // rdx  ; );------------------------------------------------------------------------------EfiCpuid PROCPUBLIC push  rbx  movr8,rdx; r8 = *Reg movrax,  rcx; RegisterInEax cpuid cmpr8,0 je _Exit mov[r8 0], eax ; Reg->RegEax mov[r8 4], ebx ; Reg->RegEbx mov[r8 8], ecx ; Reg->RegEcx mov[r812], edx ; Reg->RegEdx _Exit: poprbx retEfiCpuid  ENDP

可以看到cpuid指令接受一个参数(在EAX中),并返回4个值,分别在EAX/EBX/ECX/EDX中。

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

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

具体参数说明

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

以之前的图为例。

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


而EDX的值如下:

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

源文地址:https://www.guoxiongfei.cn/csdn/4663.html
0