CPUID (identificación de la CPU): mnemónico de instrucciones del ensamblador para procesadores x86 , que se utiliza para obtener información sobre el procesador. Usándolo, el programa puede determinar el tipo de procesador y sus capacidades (por ejemplo, puede determinar qué extensiones de conjuntos de instrucciones son compatibles).
La instrucción CPUID apareció por primera vez en los procesadores i486 . Luego se incluyó en todos los procesadores, comenzando por Intel 486DX / SX /DX2 SL, AMD 486DX4 , Cyrix 6x86 (M1), UMC U5S .
Código de operación : 0F A2.
Dado que la instrucción CPUID no estaba presente en los primeros procesadores x86 , debe asegurarse de que el procesador lo admita antes de usarlo. Para ello se intenta cambiar el bit 21 (ID) del registro EFLAGS . Si el bit cambia correctamente, la instrucción CPUID está disponible.
Código fuente para comprobar:
empujar ; colocando el registro EFLAGS en la pila pop eax ; extrayendo el valor de EFLAGS en EAX mov ebx , eax ; almacenar valor en EBX xor eax , 200000 h ; cambiar bit 21 empujar eax ; colocando un nuevo valor en la pila popfd ; almacenar nuevo valor en EFLAGS pushfd ; colocando EFLAGS en la pila de nuevo pop eax ; El valor de EFLAGS ahora está en EAX xor eax , ebx ; compruebe el bit 21 je no_cpuid ; si no ha cambiado, entonces CPUID no es compatibleEste ejemplo usa instrucciones de 32 bits, por lo que si el procesador está en modo de 16 bits, se recomienda que primero verifique si el procesador admite dichas instrucciones (es decir, si el código se ejecuta en un procesador 80386 o posterior).
La instrucción CPUID usa el contenido del registro EAX para determinar qué tipo de información del procesador devolver. La primera vez debe llamarse con el valor EAX = 0. Esto devolverá el valor máximo permitido del parámetro de instrucción soportado por este procesador.
Para obtener información sobre las funciones adicionales disponibles en los procesadores, antes de llamar a CPUID se debe configurar el bit 31 en el registro EAX, por ejemplo, para determinar el valor máximo permitido del parámetro para funciones adicionales, es necesario ejecutar CPUID con el valor EAX = 80000000 h .
Cuando EAX = 0, el procesador devuelve el identificador del fabricante del procesador ( ID del proveedor ) como 12 caracteres ASCII en los registros EBX, EDX, ECX (en ese orden) . En el registro EAX, el valor EAX máximo permitido se devuelve cuando se llama a CPUID.
Algunos identificadores de fabricantes de procesadores: [1]
cadena ASCII | Valores hexadecimales EBX:EDX:ECX | Fabricante |
---|---|---|
GenuinoIntel | 756E6547:49656E69:6C65746E | Intel |
AuténticoAMD | 68747541:69746E65:444D4163 | AMD |
Cyrixen lugar | 69727943:736E4978:64616574 | cirix |
CentaurHauls | 746E6543:48727561:736C7561 | centauro |
SiS SiS SiS | 20536953:20536953:20536953 | SIS |
Impulsado por NexGen | 4778654E:72446E65:6E657669 | NexGen |
GenuinoTMx86 | 756E6547:54656E69:3638784D | Transmeta |
SubirSubirSubir | 65736952:65736952:65736952 | Elevar |
UMC UMC UMC | 20434D55:20434D55:20434D55 | UMC |
Geoda por NSC | 646F6547:79622065:43534E20 | Semiconductor Nacional |
SoC Vortex86 | 74726F56:36387865:436F5320 | Electrónica DM&P |