Я хотел бы запросить характеристики ЦП с помощью инструкции cpuid
. Меня интересуют все дополнительные уровни CPUID, включая 0x80000000
и 0xc0000000
(Centaur). Проблема в том, что я не вижу четкого способа определить, поддерживается ли тот или иной уровень.
В частности, меня беспокоит именно этот бит из Руководство разработчика программного обеспечения для архитектур Intel (R) 64 и IA-32:
Возвращаются два типа информации: базовая и расширенная информация о функциях. Если значение, введенное для CPUID.EAX, выше, чем максимальное входное значение для базовой или расширенной функции для этого процессора, то возвращаются данные для наивысшего основного информационного листа.
Это означает, что если я запрашиваю cpuid
с помощью EAX = 0x80000000
или EAX = 0xc0000000
, я могу либо получить максимальный уровень CPUID в EAX
, либо вывести какой-то случайный лист базового уровня.
Есть ли надежный и относительно простой способ определить, поддерживается ли тот или иной уровень?