| Assembleur 80x86 |
CPUID |
| INTEL Pentium |
Central Processor Unit IDentificator |
Syntaxe
Description
Cette instruction
retourne le code d'identification du microprocesseur dans les 4 registres suivants: EAX, EBX, ECX, EDX.
Tout d'abord, si EAX = 0 lors de l'appel alors EAX retourne le nombre maximal d'entrée d'EAX et EBX:EDX:ECX retourne
la chaîne de caractères "GenuineIntel" si s'est un microprocesseur du fabricant INTEL (soit EBX =
"Genu", EDX = "ineI", ECX = "ntel"). Si EAX = 1 lors de l'appel alors EAX
contient le drapeau de fourniture fixée si les instructions CMPXCHG8B, CMOV,
FCMOV, FCMOVB sont supportée. Le bit 23 est fixée si les instructions MMX sont supportés. Si
EAX = 2 lors de l'appel alors les 4 registres: EAX, EBX, ECX et EDX contient les informations
concernant le cache et les TLBs (Translation Lookahead Buffers).
Algorithme
ÉVALUER EAX
CAS 0:
EAX ← hv
EBX ← chaîne de caractères d'identification du fabricant :
Intel: 756E6547h ("Genu")
AMD: 68747541h ("Auth")
Cyrix: 69727943h ("Cyri")
EDX ← chaîne de caractères d'identification du fabricant :
Intel: 49656E69h ("ineI")
AMD: 69746E65h ("enti")
Cyrix: 736E4978h ("xIns")
ECX ← chaîne de caractères d'identification du fabricant :
Intel: 6C65746Eh ("ntel")
AMD: 444D4163h ("cAMD")
Cyrix: 64616574h ("tead")
CAS 1:
EAX[0 à 3] ← Identification de niveau
SI Intel ou AMD ALORS
EAX[4 à 7] ← Modèle
EAX[8 à 11] ← Famille
EAX[12 à 31] ← réservée
SINON Cyrix ALORS
EAX[8 à 15] ← 6
FIN SI
EBX ← 0
ECX ← Drapeau de fourniture supplémentaire:
Bit[13] ← Instruction CMPXCHG16B supporté?
EDX ← Drapeau de fourniture:
Bit[0] ← FPU: Coprocesseur mathématique présent
Bit[1] ← CYRIX: VME: Supporte le mode Virtuel 8086
Bit[2] ← DE: Point d'arrêt aux Entrées/Sorties
Bit[3] ← CYRIX: PSE: Extension de taille de page
Bit[4] ← TSC: Compteur "Time Stamp"
Bit[5] ← MSR: CPU de style Pentium
Bit[6] ← CYRIX: PTE: Extension d'adresse physique, INTEL: PAE: Extension d'adresse physique
Bit[7] ← MCE: Vérification d'exception machine
Bit[8] ← CX8: CMPXCHG8B supportée?
Bit[9] ← CYRIX: APIC
Bit[11] ← SEP: Fourniture de d'appel rapide système (Pentium Pro+)
Bit[12] ← MTRR: CYRIX: Type de registres de rangé mémoire
Bit[13] ← PGE: Bit global PTE
Bit[14] ← CYRIX: MCA: Vérification de l'architecture machine supporté?
Bit[15] ← CMOV: Les instructions CMOV, FCMOV,... sont supportés?
Bit[16] ← PAT: Table d'attribut de page
Bit[17] ← PSE36: Microprocesseur support des pages de 4 Mo pour l'accès à la haute mémoire 2 Go
Bit[18] ← SN: Support le numéro de série du microprocesseur
Bit[19] ← Instruction CLFLUSH supporté?
Bit[23] ← MMX: Instruction MMX supporté?
Bit[24] ← FXSR: Sauvegarde/restauration rapide du microprocesseur (IA MMX-2)
Bit[25] ← SIMD: Extension de flux SIMD (IA MMX-2)
Bit[26] ← SSE2: Instruction LFENCE, MFENCE et MOVNTI supporté?
CAS 2:
SI (Pentium III ou plus) ou (Cyrix MediaGX MMX Enhanced) ALORS
EAX, EBX, ECX, EDX ← Les 4 type de cache de l'architecture du microprocesseur:
00h: Aucun
01h: Instruction TLB, 4 Ko par page, 4 routes, 64 entrées
02h: Instruction TLB, 4 Mo par page, 4 routes, 4 entrées
03h: Donnée TLB, 4 Ko par page, 4 routes, 64 entrées
04h: Donnée TLB, 4 Mo par page, 4 routes, 8 entrées
06h: Cache d'instruction, 8 Ko, 4 routes, 32 octets par ligne
08h: Cache d'instruction, 16 Ko, 4 routes, 32 octets par ligne
0Ah: Cache d'instruction, 8 Ko, 2 routes, 32 octets par ligne
0Ch: Cache d'instruction, 16 Ko, 2 routes, 32 octets par ligne
40h: Pas de cache L2
41h: Cache L2 unifié, 32 octets par ligne, 4 routes, 128 Ko
42h: Cache L2 unifié, 32 octets par ligne, 4 routes, 256 Ko
43h: Cache L2 unifié, 32 octets par ligne, 4 routes, 512 Ko
44h: Cache L2 unifié, 32 octets par ligne, 4 routes, 1 Mo
45h: Cache L2 unifié, 32 octets par ligne, 4 routes, 2 Mo
SI Cyrix MediaGX MMX Enhanced ALORS
70h: Entrée 32 bits TLB, 4 routes, Cache de 4 Ko
80h: Cache de 4 routes associative L1, 16 octets par ligne
FIN SI
SINON
EAX ← non-défini
EBX ← non-défini
ECX ← non-défini
EDX ← non-défini
FIN SI
CAS 3:
SI (Pentium III ou plus) ALORS
EDX:ECX ← Partie basse de 64 bits du numéro de série de 96 bits du microprocesseur
SINON
EAX ← non-défini
EBX ← non-défini
ECX ← non-défini
EDX ← non-défini
FIN SI
CAS 80000000h:
SI (AMD K5 sauf SSA/5, AMD K6 ou Cyrix GXm) ou (Pentium 4 ou plus) ALORS
EAX ← Valeur maximal de la fonction contenu dans le registre EAX reconnu par l'instruction CPUID (Exemple AMD 5k86 (K5) = 80000005h)
SINON
EAX ← non-défini
FIN SI
EBX ← non-défini
ECX ← non-défini
EDX ← non-défini
CAS 80000001h:
SI (AMD K5, AMD K6, Cyrix GXm ou IDT Winchip 2) ALORS
EAX ← Signature du microprocesseur AMD
0000051Xh: AMD 5k86 (K5 sauf SSA/5)
0000066Xh: AMD 6k86 (K6)
EDX ← Drapeaux des fournitures étendues:
Bit[0] ← FPU: Coprocesseur arithmétique include dans la puce du microprocesseur
Bit[1] ← VME: Extension de mode Virtual présent
Bit[2] ← DE: Extensions de déboguage
Bit[3] ← PSE: CPU support la tailles de pages de 4 Mo
Bit[4] ← TSC: TSC présent (Voir l'instruction RDTSC)
Bit[5] ← MSR: CPU est compatible MSR du K5 ou compatibilité MSR du Cyrix
Bit[6] ← PAE: Extensions de page d'adresse
Bit[7] ← MCE: Vérification d'exception machine
Bit[8] ← CX8: Support l'instruction CMPXCHG8B
Bit[9] ← APIC: CPU a un APIC local (doit être activé)
Bit[10] ← Réservé
Bit[11] ← Instruction SYSCALL et SYSRET
Bit[12] ← MTRR: Registres de type de rang mémoire (Memory Type Range Registers)
Bit[13] ← Extensions de pagination global (PTE-PGE)
Bit[14] ← MCA: Architecture de vérification machine
Bit[15] ← CMOV: Le CPU support les instructions CMOV
Bit[16] ← FCMOV: Le CPU support les instructions FCMOV
Bit[17] ← PSE: Extension de taille de Page
Bit[21..18] ← Réservé
Bit[22] ← MMXE: CPU Support les extensions d'instructions MMX (AMD Athlon)
Bit[23] ← MMX: CPU support IA MMX
Bit[24] ← (Cyrix) Cyrix supporte l'extension MMX
Bit[24] ← (AMD) Support les instructions FXSAVE/FXRSTOR
Bit[29..25] ← Réservé
Bit[30] ← CPU support les instructions étendue 3DNow!
Bit[31] ← Support l'AMD 3DNow!
SINON
EAX ← non-défini
EDX ← non-défini
FIN SI
EBX ← non-défini
ECX ← Drapeau de fourniture supplémentaire:
Bit[0] ← Instruction LAHF est supporté en mode 64 bits?
Bit[2] ← Les instructions SVM (CLGI,...) sont supportés?
Bit[5] ← Instruction LZCNT supporté?
Bit[8] ← Instruction PREFETCH du «3DNow! Prefetch» supporté?
CAS 80000002h,80000003h,80000004h:
SI (AMD K5, AMD K6 ou Cyrix GXm) ALORS
EAX, EBX, ECX, EDX ← Nom du CPU sous forme d'une chaine de caractères (si AMD K5, en format BIG-Endian)
SINON
EAX ← non-défini
EBX ← non-défini
ECX ← non-défini
EDX ← non-défini
FIN SI
CAS 80000008h:
EAX ← Demande des informations sur la taille des adresses et le compteur de coeur physique:
Bit[23..16] ← Demande la taille maximal physique invité d'octets en bits
Bit[15..8] ← Demande la taille maximal linéaire d'une adresse d'octets en bits
Bit[7..0] ← Demande la taille maximal physique d'octets en bits
ECX ← NC: Demande le nombre de coeur que comprendre le microprocesseur - 1.
AUTREMENT:
EAX ← non-défini
EBX ← non-défini
ECX ← non-défini
EDX ← non-défini
FIN ÉVALUER
|
Remarque
Voici la table des fournitures standard retourner par le registre EAX=1 de l'instruction CPUID en fonction des différents fabricants:
| Bit[0] |
FPU |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
| Bit[1] |
VME |
- |
- |
- |
- |
- |
- |
- |
- |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
| Bit[2] |
DE |
- |
+ |
- |
+ |
+ |
- |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
| Bit[3] |
PSE |
- |
- |
- |
- |
- |
- |
- |
- |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
| Bit[4] |
TSC |
- |
- |
- |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
| Bit[5] |
MSR |
- |
- |
- |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
| Bit[6] |
PAE |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
+ |
- |
- |
+ |
+ |
+ |
+ |
| Bit[7] |
MCE |
- |
- |
- |
- |
- |
- |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
| Bit[8] |
CX8 |
- |
+ |
- |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
| Bit[9] |
APIC |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
x |
+ |
(1) |
(1) |
(1) |
(1) |
(1) |
(1) |
| Bit[10] |
res |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
? |
- |
| Bit[11] |
SEP |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
+ |
- |
- |
+ |
+ |
+ |
+ |
| Bit[12] |
MTRR |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
+ |
- |
- |
+ |
+ |
+ |
+ |
| Bit[13] |
PGE |
- |
- |
- |
+ |
+ |
- |
- |
- |
- |
- |
- |
- |
+ |
- |
- |
+ |
+ |
+ |
+ |
| Bit[14] |
MCA |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
+ |
- |
- |
+ |
+ |
+ |
+ |
| Bit[15] |
CMOV |
- |
- |
- |
+ |
+ |
+ |
- |
- |
- |
- |
- |
- |
+ |
- |
- |
+ |
+ |
+ |
+ |
| Bit[16] |
PAT |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
+ |
- |
- |
- |
(2) |
+ |
+ |
| Bit[17] |
PSE36 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
(2) |
+ |
+ |
| Bit[18] |
SN |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
+ |
- |
| Bit[23] |
MMX |
- |
- |
- |
+ |
+ |
+ |
+ |
+ |
- |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
+ |
| Bit[24] |
FXSR |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
(2) |
+ |
+ |
| Bit[25] |
SIMD |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
+ |
- |
(1) = Intel produit des puces avec APIC et sans APIC.
(2) = Il commence à supporter les coeurs «Deschutes»
Mnémonique
| CPUID |
0Fh A2h |
Retourne les informations à propos du microprocesseur et sa compatiblité. Le registre EAX correspond à un numéro de fonction et les données sont retournées dans les registres EAX, EBX, ECX et EDX. |
Exceptions
Aucune
Références
AMD CPUID Specification, Edition Advanced Micro Devices, Revision 2.28, April 2008, Publication No. 25481.
AMD64 Architecture Programmer's Manual Volume 3: General-Purpose and System Instructions, Edition Advanced Micro Devices, Revision 3.14, September 2007, Publication No. 24594, page 103 à 104.
The Undocumented PC: A programmer's Guide to I/O, CPUs, and Fixed Memory Areas - Second Edition, Edition Addison-Wesley, Frank van Gilluwe, 1997, ISBN: 0-201-47950-8, page 64 à 67.
|