Dans le monde informatique d’aujourd’hui, obtenir des informations détaillées sur un processeur est devenu incroyablement facile, en grande partie grâce à l’introduction de l’instruction CPUID. Cette fonctionnalité est apparue en 1993 lorsque Intel a introduit pour la première fois les processeurs Pentium et 486 améliorés par SL, permettant aux programmeurs d'interroger facilement le type de processeur et les fonctionnalités qu'il prend en charge, telles que MMX et SSE. Avant que l’instruction CPUID ne devienne courante, les programmeurs utilisaient des méthodes uniques pour identifier le type de processeur, ce qui était une aventure technique à l’époque.
Avant CPUID, les programmeurs s'appuyaient sur des codes machine considérés comme ésotériques pour découvrir des différences subtiles dans le comportement du processeur.
Avec l'introduction du processeur 80386, le processeur indique sa version via le registre EDX lors de son redémarrage. Cependant, ces informations n’étaient disponibles qu’après un redémarrage et il n’existait aucun moyen standard permettant aux applications de lire directement cette valeur. Cela signifie que les programmeurs doivent utiliser divers moyens inhabituels pour identifier différents processeurs. Par exemple, les processeurs de la série 680x0 de Motorola n'ont jamais eu d'instructions CPUID. Les développeurs doivent utiliser certaines instructions spéciales pour déterminer le type de processeur, et ces instructions nécessitent une exécution privilégiée. Dans ce contexte, le processeur 68010 marque l’instruction MOVE du registre d’état comme privilégiée, ce qui la rend conforme aux exigences de virtualisation.
L'apparition de l'instruction CPUID n'est pas seulement pratique pour les programmeurs de l'architecture x86, mais affecte également la conception d'autres architectures telles qu'ARM. Ces architectures fournissent généralement des registres similaires à CPUID pour obtenir des informations de base sur le processeur.
Le code d'opération dans CPUID est 0F A2. En règle générale, dans les langages assembleurs, l'instruction CPUID ne nécessite aucun argument, car elle utilise implicitement le registre EAX pour déterminer la catégorie principale d'informations à renvoyer. Cet appel est appelé une « feuille » de CPUID. Selon la terminologie Intel, la première fois que CPUID est appelé, EAX doit être défini sur 0 pour obtenir les paramètres de fonction les plus élevés pris en charge par le processeur.
Pour obtenir des informations de fonction étendues, le bit le plus élevé de EAX de l'appel CPUID doit être défini sur 1.
Avec le développement de l'informatique générale, la portée effective de nombreuses feuilles de base obtenues sur la base du CPUID a atteint 23h. Sur la base de l'appel à CPUID, diverses informations peuvent être obtenues, telles que l'ID du fabricant et la prise en charge de diverses fonctionnalités du processeur. Dans de nombreux cas, les informations renvoyées ne sont pas divulguées dans la documentation publique, les développeurs doivent donc s'appuyer sur l'expérience et la littérature pour explorer les secrets du processeur.
Lorsque EAX est défini sur 0, le processeur renvoie sa chaîne d'identification du fabricant, une chaîne ASCII de 12 caractères stockée dans les registres EBX, EDX et ECX, en séquence. Selon les dernières informations, l'ID standard du fabricant du processeur est le suivant :
En définissant EAX sur 1, vous pouvez obtenir les informations sur le pas du processeur, le modèle et la série, qui sont cruciales pour évaluer les performances de chaque modèle. Cela représente l'identification du processeur et renvoie les indicateurs de fonction et des informations de fonctionnalités supplémentaires dans les registres EAX, EDX et ECX.
Toutes les informations sur le processeur sont spécifiques au fabricant, mais dans la plupart des cas, les valeurs d'Intel sont utilisées par d'autres fabricants pour la compatibilité.
L'émergence de cette méthode permet aux développeurs de comprendre clairement le niveau physique du processeur. Au fil du temps, cette technologie devient de plus en plus utilisée, favorisant ainsi l'avancement de l'ensemble de la technologie informatique. En outre, cela favorise également la conception de processeurs multicœurs et encourage l’évolution continue des architectures de processeurs ultérieures.
Avec le développement continu de la technologie des processeurs, l'influence de l'instruction CPUID est devenue de plus en plus évidente, fournissant des informations matérielles importantes pour divers programmes et systèmes. Cependant, à mesure que la technologie future s'approfondit, nous ne pouvons nous empêcher de nous demander : alors que le matériel évolue rapidement, comment la programmation future sera-t-elle capable de comprendre plus intelligemment ces caractéristiques matérielles et d'optimiser leurs performances ?