Programación en lenguaje C para obtener información de la CPU.
Ten paciencia y echa un vistazo. ¡Espero que te sea de ayuda!
#includelt; stdio.hgt;
int sin signo vex;
int sin signo vebx; >
unsigned int vecx;
//Ejecutar instrucción CPUID
void cpuid(unsigned int veax1)
{
_asm {
mov eax, veax1
cpuid
mov veax, eax
mov vebx, ebx
mov vecx, ecx
mov vedx, edx
}
}
//Realice una operación de cambio para cambiar el código ASCII en el registro, salida en forma de caracteres
void LeftMove(unsigned int var)
{
printf("c", var);
for(int i=0;ilt;3;i)
{
var=(vargt;gt;;
printf("c", var );
}
}
//Realizar una operación de cambio y generar el valor en el registro en forma de "d"
void LM(unsigned int var)
{
printf("d", var);
for(int i=0; ilt; 3; i )
{
var=(vargt; gt;;
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);
MovimientoIzquierdo(vebx);
MovimientoIzquierdo(vedx);
MovimientoIzquierdo(vecx);
printf("\
";
}
//Obtener la marca registrada de la CPU, cuando EAX Cuando los valores son 0x80000003 y 0x80000004, se devuelven 16 caracteres respectivamente para formar una marca registrada
//Almacenado en EAX, EBX, ECX, EDX en secuencia
void getCpuBrand()
{
for(int j=0;jlt;2;j)
{
cpuid(0x80000003 j);
MovimientoIzquierdo(veax);
MovimientoIzquierdo(vebx);
MovimientoIzquierdo(vecx); MovimientoIzquierdo(vedx);
}
printf("\
";
}
// Obtener C
Características de la PU, el parámetro es eax = 1, el valor de retorno se coloca en edx y ecx, verificando un determinado bit de edx o ecx,
//Se puede obtener si una característica de la CPU es compatible. Por ejemplo, el bit 32 de edx representa si admite MMX,
//el bit 28 de edx representa si admite Hyper-Threading y el bit 7 de ecx representa si admite velocidad sted.
void getCpuFeature()
{// Debido a que hay demasiadas funciones, es imposible escribirlas una por una. Escríbalas nuevamente cuando sea necesario.
}
// Obtenga el número de serie de la CPU. Para obtener el número de serie, primero use eax = 1 como parámetro. almacenado en el eax devuelto.
//Utilice eax = 3 como parámetro, devuelva ecx y edx para almacenar las primeras 4 PALABRAS en orden de menor a mayor.
void getCpuSeris()
{
cpuid(1);
LM(veax); cpuid(3);
LM(vecx);
LM(vedx);
printf("\
";
}
void main()
{
getCpuName()
getCpuBrand(); p>
p>
getCpuSeris();
}