CPUID : поддержка расширенных функций

Тема в разделе "WASM.OS.DEVEL", создана пользователем o14189, 1 авг 2009.

  1. o14189

    o14189 New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2009
    Сообщения:
    320
    собственно вопрос заключается в том, чтобы проверить есть ли поддержка расширенных функций процессором
    те что eax = 0x80000000 и выше

    пройдет ли вариант
    Код (Text):
    1. CPUID(0x80000000).EAX == CPUID(CPUID(0x00000000).EAX+1).EAX
    ?
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Код (Text):
    1. CPUID(0x00000000).EAX
    Это максимальный номер функции, который может быть вызван, +1 не валидный. Например у меня(P4):
    CPUID(0x00000000).Eax = 3
    CPUID(0x80000000).Eax = 0x80000008
    Интел проверяет следующим образом:
    Код (Text):
    1.     MOV EAX, 80000000h
    2.     CPUID
    3.     CMP EAX, 80000004h  ; Check if extended  
    4.     ; functions are  
    5.     ; supported
    6.     JB Not_Supported
     
  3. ohne

    ohne New Member

    Публикаций:
    0
    Регистрация:
    28 фев 2009
    Сообщения:
    431
    это ясно, у меня тоже есть эти пдф файлы
    нужно было поддержку проверить расширенных функций
    тот код что ты показал подходит, и правда минимальное значение максимальной расширенной функции 0x80000004 (Pentium IV)
    результат также может быть замаскирован
    так что и такое решение устроило
    Код (Text):
    1. if(CPUID(0x80000000).EAX&0x80000000)
    2. {
    3. //extended fns supported
    4. }
    5. else
    6. {
    7. //not
    8. }
    спасибо