Accueil des Chevaliers de Malte - Développeur Notes légal des Chevaliers de Malte/Développeur Flux RSS des nouvelles du site Les Chevaliers de Malte/Développeur - Assembleur et Pascal - Instruction assembleur 80x86 - Instruction CPUID Section du logiciel DOS «MonsterBook» des Chevaliers de Malte/Développeur Inventaire de la bibliothèque des Chevaliers de Malte/Développeur Entrée administrateur


Assembleur 80x86 CPUID
INTEL Pentium Central Processor Unit IDentificator

Syntaxe

CPUID


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:

    Registre EDX Nom Cyrix 6x86 Cyrix 6x86L Cyrix GX Cyrix 6x86MX Cyrix MII Cyrix GXm AMD C6 AMD C2 AMD K5 AMD K6 AMD K6-2 AMD K6-III AMD Athlon INTEL Pentium INTEL Pentium MMX INTEL Pentium Pro INTEL Pentium II INTEL Pentium III INTEL Pentium Celeron
    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

Instruction Opcode Description
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.

Dernière mise à jour: Dimanche, le 3 janvier 2010