CPUID

De la Viquipèdia, l'enciclopèdia lliure
Foto de CPUID per a Transmeta Crusoe TM5800 800Mhz a Fujitsu P2040

A l'arquitectura x86, la instrucció CPUID (identificada per un codi operatiu CPUID) és una instrucció suplementària del processador (el seu nom deriva de la identificació de la CPU) que permet al programari descobrir detalls del processador. Va ser introduït per Intel l'any 1993 amb el llançament dels processadors Pentium i 486 millorats amb SL.[1]

Un programa pot utilitzar el CPUID per determinar el tipus de processador i si s'implementen funcions com MMX/SSE.[2]

Història[modifica]

Abans de la disponibilitat general de la instrucció CPUID, els programadors escriurien codi de màquina esotèric que aprofitava diferències menors en el comportament de la CPU per determinar la marca i el model del processador.[3][4] Amb la introducció del processador 80386, EDX en reiniciar va indicar la revisió, però només es podia llegir després del restabliment i no hi havia cap manera estàndard per a les aplicacions de llegir el valor.

Fora de la família x86, els desenvolupadors encara estan obligats a utilitzar processos esotèrics (que impliquen temporització d'instruccions o activadors d'error de la CPU) per determinar les variacions del disseny de la CPU que hi ha.

A la família Motorola 680x0, que mai no va tenir cap instrucció CPUID, determinades instruccions específiques requerien privilegis elevats. Es podrien utilitzar per distingir diversos membres de la família de CPU. Al Motorola 68010 es va privilegiar la instrucció MOVE from SR. Aquest canvi notable d'instruccions (i màquina d'estat) va permetre que el 68010 compleixi els requisits de virtualització de Popek i Goldberg. Com que el 68000 oferia un MOVE sense privilegis des de SR, es podrien distingir 2 CPU diferents per una condició d'error de la CPU activada.

Tot i que la instrucció CPUID és específica de l'arquitectura x86, altres arquitectures (com ARM) sovint proporcionen registres en xip que es poden llegir de maneres prescrites per obtenir el mateix tipus d'informació proporcionada per la instrucció CPUID x86.

Crida a CPUID[modifica]

El codi operatiu CPUID és 0F A2.

En llenguatge ensamblador, la instrucció CPUID no pren paràmetres ja que CPUID utilitza implícitament el registre EAX per determinar la categoria principal d'informació retornada. En la terminologia més recent d'Intel, això s'anomena fulla CPUID. CPUID s'ha de cridar primer amb EAX = 0, ja que això emmagatzemarà al registre EAX el paràmetre de crida EAX més alt (fulla) que implementa la CPU.

Per obtenir informació de funció ampliada, s'hauria de cridar CPUID amb el bit més significatiu d'EAX. Per determinar el paràmetre de trucada de funció estesa més alt, truqueu CPUID amb EAX = 80000000h.

Referències[modifica]

  1. «Intel 64 and IA-32 Architectures Software Developer's Manual» (en anglès). Intel.com. [Consulta: 11 abril 2013].
  2. «What is CPUID Software Used For? - GadgetMates» (en anglès americà), 30-05-2023. [Consulta: 28 novembre 2023].
  3. «Detecting Intel Processors - Knowing the generation of a system CPU» (en anglès). Rcollins.org. [Consulta: 11 abril 2013].
  4. «LXR linux-old/arch/i386/kernel/head.S» (en anglès). Lxr.linux.no. Arxivat de l'original el 2012-07-13. [Consulta: 11 abril 2013].