Comment peut-on détecter le type d'architecture du processeur lors de l'exécution avec asm GCC et en ligne?
-
20-09-2019 - |
Question
Je dois trouver le type d'architecture d'un CPU. Je n'ai pas accès à / proc / cpuinfo, que la machine est en marche syslinux. Je sais qu'il ya un moyen de le faire avec l'ASM en ligne, mais je crois que ma syntaxe est incorrecte que ma iedx variable est pas correctement réglée.
Je trimer avec ASM, et en aucun cas un expert. Si quelqu'un a des conseils ou peut me diriger dans la bonne direction, je serais bien obligé.
static int is64Bit(void) {
int iedx = 0;
asm("mov %eax, 0x80000001");
asm("cpuid");
asm("mov %0, %%eax" : : "a" (iedx));
if ((iedx) && (1 << 29))
{
return 1;
}
return 0;
}
La solution
Combien de bogues pouvez-vous tenir dans si peu de lignes;)
Essayez
static int is64bit(void) {
int iedx = 0;
asm volatile ("movl $0x80000001, %%eax\n"
"cpuid\n"
: "=d"(iedx)
: /* No Inputs */
: "eax", "ebx", "ecx"
);
if(iedx & (1 << 29))
{
return 1;
}
return 0;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow