我需要找到一个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;
}
有帮助吗?

解决方案

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

尝试

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;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top