Как вы определяете тип архитектуры процессора во время выполнения с помощью GCC и встроенного asm?

StackOverflow https://stackoverflow.com/questions/1917761

Вопрос

Мне нужно найти тип архитектуры процессора.У меня нет доступа к /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