どのようにGCCインラインアセンブラと実行時にCPUアーキテクチャのタイプを検出しますか?
-
20-09-2019 - |
質問
私は、CPUのアーキテクチャタイプを見つける必要があります。マシンはSYSLINUXを実行しているように私は、/ procの/ cpuinfoのにアクセスすることはできません。私は、しかし、私は私の変数iedxが正しく設定されていないとして、私の構文が間違っていると信じて、インラインASMでそれを行うための方法が存在しているはずます。
私はASMとともにdrudging、そして何で専門家を意味しています。誰もが任意のヒントを持っているか、正しい方向に私を指すことができれば、私はずっと義務となります。
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