Comment peut-on détecter le type d'architecture du processeur lors de l'exécution avec asm GCC et en ligne?

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

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;
}
Était-ce utile?

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