你如何检测在运行时与GCC和内联汇编的CPU架构类型?
-
20-09-2019 - |
题
我需要找到一个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;
}
不隶属于 StackOverflow