Для машинного кода, который определяет, в каком режиме он работает, см. Эту функцию машинного кода code-golf x86, которая возвращает 16, 32 или 64: Определите версию вашего языка . Одни и те же байты машинного кода дают разные результаты в зависимости от того, в каком режиме они декодируются.
Или только 32 против 64, см. фрагмент машинного кода полиглота x86-32 / x86-64, который обнаруживает 64-битный режим во время выполнения?
В большинстве случаев вам не нужно обнаруживать текущий режим, потому что вы знаете, для чего был скомпилирован / собран ваш код. (например, в NASM, %ifidn __BITS__ 32
или проверка %ifidn __OUTPUT_FORMAT__, elf32
, которая также работает в YASM.)
Чтобы определить возможности ЦП независимо от текущего режима, используйте CPUID. Как определить тип архитектуры процессора во время выполнения с GCC и встроенным asm? (или использовать cpuid.h
: Как я могу назвать "cpuid" в Linux? )
Это все еще не говорит вам, будет ли ОС, под которой вы работаете, поддерживать 64-битные исполняемые файлы ; если вы хотите знать, что вам нужно просто проверить, что вы работаете под 64-битной ОС. CPUID не может помочь вам в этом: механизмы 32-битных программ для запроса ОС, конечно, зависят от ОС.
ИМО "архитектура" вашего ЦП - неправильный вопрос, почти во всех случаях. (т. е. если вы не пишете свое собственное ядро или не пишете программу CPU-info). Знание этого не поможет вашей программе решить, что делать.
32-битные x86-процессоры не выпускались годами и становятся все более и более редкими. Но 32-разрядные ОС все еще используются на 64-разрядных процессорах.