3

我需要找到 CPU 的架构类型。我无权访问 /proc/cpuinfo,因为机器正在运行 syslinux。我知道有一种使用内联 ASM 的方法,但是我认为我的语法不正确,因为我的变量 iedx 没有正确设置。

我与 ASM 一起苦苦挣扎,绝不是专家。如果有人有任何提示或可以指出我正确的方向,我将非常感激。

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;
}
4

1 回答 1

6

这么几行可以容纳多少错误;)

尝试

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;
}
于 2009-12-16T21:41:06.733 回答