¿Cómo se detecta el tipo de arquitectura de la CPU durante el tiempo de ejecución con GCC y la línea ASM?
-
20-09-2019 - |
Pregunta
Tengo que encontrar el tipo de arquitectura de una CPU. No tengo acceso a / proc / cpuinfo, ya que la máquina está funcionando syslinux. Sé que hay una manera de hacerlo con ASM en línea, sin embargo creo que mi sintaxis es incorrecto, ya que mi iedx variable no está configurado correctamente.
Estoy drudging junto con ASM, y de ninguna manera un experto. Si alguien tiene algún consejo o me puede apuntar en la dirección correcta, estaría muy agradecido.
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;
}
Solución
¿Cuántos errores puede caber en tan pocas líneas;)
Trate
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;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow