Programación en lenguaje C para obtener información de la CPU.
# include & ltstdio.h & gt
Int veax sin signo
Int vebx sin signo
Int vedx sin signo p>
Unsigned int vecx
//Ejecutar instrucción CPUID
void cpuid (entero sin signo veax1)
{
_asm{ p>
mov eax, veax1
cpuid
mov veax, eax
mov vebx, ebx
mov vecx, ecx
mov vedx, edx
}
}
//Cambia el código ASCII en el registro, Salida en forma de caracteres.
void LeftMove (variable entera sin signo)
{
printf("%c ", var);
for( int I = 0;i<3;i++)
{
var = (var >>
printf("%c ", var);
}
}
//Realice una operación de cambio y genere el valor en el registro como "%d"
<>void LM (unsigned. variable entera){
printf("%d ", var);
for(int I = 0; i<3;i++)
{
var = (var >>
printf("%d ",var);
p>}
}
//Obtenga el fabricante de la CPU (cuando el valor EAX es 0) y guárdelo en EBX, EDX y ECX en secuencia
void getCpuName()
{
cpuid(0);
movimiento a la izquierda (vebx);
movimiento a la izquierda (vedx); p>movimiento izquierdo(vecx);
printf("\
";
}
// Obtener la marca registrada del CPU Cuando los valores en EAX son 0x80000003 y 0x80000004, se devuelven 16 caracteres para formar la marca registrada
//Almacenada en EAX, EBX, ECX y EDX >void getCpuBrand()
{
for(int j = 0; j & lt2;j++)
{
cpuid( 0x 80000003+j); p>
movimiento a la izquierda(veax);
movimiento a la izquierda(vebx);
movimiento a la izquierda(vecx);
movimiento a la izquierda(vedx);
}
printf("\
";
}
//Obtener las características del CPU, el parámetro es eax = 1 y el valor de retorno se coloca en edx y ecx. Después de verificar un edx o ecx,
//Puedes saber si se admite una determinada característica de la CPU. Por ejemplo, el bit 32 de edx indica si se admite MMX
// El bit 28 de edx indica si se admite hyper-threading y el bit 7 de ecx indica si se admite la velocidad sted.
void getCpuFeature()
{//Debido a que hay demasiadas funciones, no podemos escribirlas una por una. Escríbalo cuando sea necesario. El método es el mismo.
}
//Obtener el número de serie de la CPU requiere dos pasos. Primero, se usa eax = 1 como parámetro y el eax devuelto almacena las dos palabras superiores del número de secuencia.
//Con eax = 3 como parámetro, devuelve ecx y edx, y almacena las primeras cuatro palabras de menor a mayor.
void getCpuSeris()
{
cpuid(1);
LM(veax);
cpuid(3);
LM(vecx);
LM(vedx);
printf("\
";
}
void main()
{
getCpuName();
getCpuBrand(); p>
p>
getCpuSeris();
}