¿Cómo se detecta el tipo de arquitectura de la CPU durante el tiempo de ejecución con GCC y la línea ASM?

StackOverflow https://stackoverflow.com/questions/1917761

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;
}
¿Fue útil?

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
scroll top