Как вы определяете тип архитектуры процессора во время выполнения с помощью GCC и встроенного asm?
-
20-09-2019 - |
Вопрос
Мне нужно найти тип архитектуры процессора.У меня нет доступа к /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