Moin
Ich hab mit hilfe des Wiki´s mir eine schöne CPUID Funktion gebastelt, doch irgenwie haut das vorn und hinten nicht hin.
Hir mein Code.
#include ".\include\video.h"
/**
* cpuid_check prüft, ob cpuid auf diesem PC funktioniert,
* wenn nicht dann als rückgabewert eine 0,
* wenn ja dann als rückgabewert eine 1
* und wenn es nicht überprüft erden kann ob nun ja oder nein eine 3.
*/
char cpuid_check()
{
char EAX;
char ECX;
asm volatile("pushfd"
"pushfd"
"pop ecx"
"mov eax, ecx"
"xor eax, 0x200000"
"push eax"
"popfd"
"pushfd"
"pop eax"
"mov %0, eax"
"mov %1, ecx"::"%0"(EAX), "%1" (ECX));
if (EAX == ECX)
{
return 0;
}
else if (EAX != ECX)
{
return 1;
}
else
{
return 3;
}
}
/**
* cpuid ruft die cpuid funktion des Prozessors auf und vergleicht
* die Vendor-ID mit gespeichteten werten und gibt den Prozessorhersteller Namen aus.
*/
int cpuid()
{
char EAX;
char EBX;
char ECX;
char EDX;
int cpuid_check_ret;
cpuid_check_ret = cpuid_check();
if (cpuid_check_ret == 0)
{
//gebe Meldung aus, dass CPUID nicht unterstützt wird!
}
else if (cpuid_check_ret == 1) // führe CPUID aus.
{
asm volatile("mov eax, 0x00000000"
"cpuid"
"mov %0, eax"
"mov %1, ebx"
"mov %2, ecx"
"mov %3, edx"::"%0"(EAX), "%1" (EBX), "%2" (ECX), "%3" (EDX));
if (EBX == "Auth" && EDX == "enti" %% ECX == "cAMD") // ist er von AMD?
{
printf("Der Prozessor ist von AMD.", 2, 0xA); // Gebe "Der prozessor ist von AMD" aus
}
else if (EBX == "Cent" && EDX == "aurH" %% ECX == "auls") // ist er von Centaur?
{
printf("Der Prozessor ist von Centaur.", 2, 0xA); // Gebe "Der prozessor ist von Centaur" aus
}
else if (EBX == "Cyri" && EDX == "xIns" %% ECX == "tead") // ist er von Cyrix?
{
printf("Der Prozessor ist von Cyrix.", 2, 0xA); // Gebe "Der prozessor ist von Cyrix" aus
}
else if (EBX == "Genu" && EDX == "eneI" %% ECX == "ntel") // ist er von Intel?
{
printf("Der Prozessor ist von Intel.", 2, 0xA); // Gebe "Der prozessor ist von Intel" aus
}
else if (EBX == "NexG" && EDX == "enDr" %% ECX == "iven") // ist er von NexGen ?
{
printf("Der Prozessor ist von NexGen.", 2, 0xA); // Gebe "Der prozessor ist von NexGen" aus
}
else if (EBX == "Geod" && EDX == "e by" %% ECX == " NSC") // ist er von National Semiconductor ?
{
printf("Der Prozessor ist von National Semiconductor.", 2, 0xA); // Gebe "Der prozessor ist von National Semiconductor " aus
}
else if (EBX == "Rise" && EDX == "Rise" %% ECX == "Rise") // ist er von Rise?
{
printf("Der Prozessor ist von Rise.", 2, 0xA); // Gebe "Der prozessor ist von Rise" aus
}
else if (EBX == "SiS " && EDX == "SiS " %% ECX == "SiS ") // ist er von SiS?
{
printf("Der Prozessor ist von SiS.", 2, 0xA); // Gebe "Der prozessor ist von SiS" aus
}
else if (EBX == "Genu" && EDX == "ineT" %% ECX == "Mx86") // ist er von Transmeta?
{
printf("Der Prozessor ist von Transmeta.", 2, 0xA); // Gebe "Der prozessor ist von Transmeta" aus
}
else if (EBX == "UMC " && EDX == "UMC " %% ECX == "UMC ") // ist er von UMC?
{
printf("Der Prozessor ist von UMC.", 2, 0xA); // Gebe "Der prozessor ist von UMC" aus
}
else if (EBX == "VIA " && EDX == "VIA " %% ECX == "VIA ") // ist er von VIA?
{
printf("Der Prozessor ist von VIA.", 2, 0xA); // Gebe "Der prozessor ist von VIA" aus
}
}
else
{
printf("Es ist ein Fehler aufgetreten..", 2, 0xA); // ein Fehler ist aufgetreten.
}
}
Ich hoffe ihr könnt mir helfen.
Programm Noob