CPUID

CPUID操作码是一个面向x86架构的处理器补充指令,它的名称衍生自CPU识别,作用是允许软件发现处理器的详细信息。它由英特尔在1993年引入奔騰SL增强486处理器。[1]

通过使用CPUID操作码,软件可以确定处理器的类型和特性支持(例如MMX/SSE)。CPUID操作码为0Fh、A2h(双字节形式,A20Fh为单字(word))形式,值位于EAX寄存器中,某些情况下ECX寄存器用于指定要返回的信息。

历史

CPUID指令普遍可用前,程序员需要编写深奥的机器语言利用CPU行为的微小差异来确定处理器的情况和型号。[2][3]

在x86系列之外,开发人员大多仍然需要使用深奥的过程来确定CPU设计存在的差异。虽然CPUID指令针对x86架构,但其他架构(例如ARM)通常提供可供读取的片上寄存器来获取与此指令提供的相同种类的信息。

调用CPUID

汇编语言中,CPUID指令不使用参数,因为CPUID隐式使用EAX寄存器来确定返回信息的主类别。在英特尔最新的术语中,这被称为CPUID leaf。CPUID的调用应该以EAX = 0开始,这将在EAX寄存器中返回CPU支持的最高EAX调用参数(leaf)。

x86外的特定CPU识别信息

一些非x86的CPU架构也提供了有关处理器能力的某种形式的结构化信息,通常作为一组特殊寄存器:

  • ARM架構有一个CPUID协处理器寄存器。[4]
  • IBM System z大型机处理器自1983年的IBM 4381起支持“Store CPU ID”(STIDP)指令[5],用于查询处理器ID。[6]
  • MIPS32架构定义了一个强制性的Processor IdentificationPrId)和一系列菊花链“配置寄存器”。[7]
  • PowerPC处理器有32位只读的PVR寄存器来识别使用的处理器型号。.[8]

参见

  • CPU-Z,一个使用CPUID等信息识别系统配置的Windows实用工具。
  • cpuid類Unix作業系統下的讀取CPUID的實用工具。

参考资料

  1. (PDF). Intel.com. [2013-04-11]. (原始内容存档 (PDF)于2009-04-19).
  2. . Rcollins.org. [2013-04-11]. (原始内容存档于2013-06-04).
  3. . Lxr.linux.no. [2013-04-11]. (原始内容存档于2012-07-13).
  4. . Infocenter.arm.com. [2013-04-11]. (原始内容存档于2013-05-27).
  5. . [2014-09-08]. (原始内容存档于2014-09-08).
  6. (PDF). [2017-04-10]. (原始内容存档 (PDF)于2017-08-29).
  7. (PDF). MIPS Technologies, Inc. 2001-03-12 [2017-04-10]. (原始内容存档 (PDF)于2016-03-04).
  8. (PDF). [2017-04-10]. (原始内容存档 (PDF)于2016-03-04).
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.