Такой вопрос: меня интересует, кто-нить уже пробовал проводить идентификацию ЦПУ, не используя cpuid, а, например, через регистр флагов. Сама суть вот в чем: некоторая программная сущность должна запускаться на голом железе, проверять 16 или 32 битный процессор имеется и переключать режим работы, если есть поддержка 32-х битных инструкций/машинных слов.
ProgramMan А что, если программа запущена на 8086? Там-то таких регистров нет. И потом, инф-я, я думаю, берется из аппаратных регистров, которые не доступны кодеру.
я имел в виду команды вида RDMSR ("Load MSR specified by ECX into EDX:EAX."), разве этого не было на 8086?
ProgramMan RDMSR, если мне не изменяет память, появилась впервые на 586 Я вроде бы догадался в чем фишка... А что если пропушить какой-либо 32-х битный регистр, то тут одно из двух получается: либо в стеке буде 32 бита, либо прерывание о несуществующем опкоде, вроде бы так
в пакете TASM есть исходник утилитки CPUID, которая до 486 определяет CPU по флагам и некоторым специфичным командам
В мануале IA-32, ч.1 есть раздел 13.2 Identification of Earlier IA-32 Processors. Там расписано как идентифицировать 8086,i286,i386 и выше по EFLAGS (биты 12-15, 18 и 21)