CPU Identification

Тема в разделе "WASM.ASSEMBLER", создана пользователем litallus, 28 ноя 2004.

  1. litallus

    litallus New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2004
    Сообщения:
    3
    Адрес:
    The Ukraine
    Такой вопрос:

    меня интересует, кто-нить уже пробовал проводить идентификацию ЦПУ, не используя cpuid, а, например, через регистр флагов.

    Сама суть вот в чем:

    некоторая программная сущность должна запускаться на голом железе, проверять 16 или 32 битный процессор имеется и переключать режим работы, если есть поддержка 32-х битных инструкций/машинных слов.
     
  2. ProgramMan

    ProgramMan New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2004
    Сообщения:
    263
    Можно копать в направлении машинных регистров, от туда как раз и берётся информация командой cpuid
     
  3. litallus

    litallus New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2004
    Сообщения:
    3
    Адрес:
    The Ukraine
    ProgramMan

    А что, если программа запущена на 8086? Там-то таких регистров нет. И потом, инф-я, я думаю, берется из аппаратных регистров, которые не доступны кодеру.
     
  4. ProgramMan

    ProgramMan New Member

    Публикаций:
    0
    Регистрация:
    13 янв 2004
    Сообщения:
    263
    я имел в виду команды вида RDMSR ("Load MSR specified by ECX into EDX:EAX."), разве этого не было на 8086?
     
  5. litallus

    litallus New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2004
    Сообщения:
    3
    Адрес:
    The Ukraine
    ProgramMan

    RDMSR, если мне не изменяет память, появилась впервые на 586 :) Я вроде бы догадался в чем фишка... А что если пропушить какой-либо 32-х битный регистр, то тут одно из двух получается: либо в стеке буде 32 бита, либо прерывание о несуществующем опкоде, вроде бы так :)
     
  6. Johnikum

    Johnikum Member

    Публикаций:
    0
    Регистрация:
    6 июн 2003
    Сообщения:
    97
    в пакете TASM есть исходник утилитки CPUID, которая до 486 определяет CPU по флагам и некоторым специфичным командам
     
  7. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    В мануале IA-32, ч.1 есть раздел 13.2 Identification of Earlier IA-32 Processors.

    Там расписано как идентифицировать 8086,i286,i386 и выше по EFLAGS (биты 12-15, 18 и 21)
     
  8. lis

    lis New Member

    Публикаций:
    0
    Регистрация:
    30 дек 2004
    Сообщения:
    23
    Адрес:
    Russia
    litallus

    Если хочешь вышлю пример. Пиши artykov@mail.ru