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

Discussion in 'WASM.OS.DEVEL' started by o14189, Aug 1, 2009.

  1. o14189

    o14189 New Member

    Blog Posts:
    0
    Joined:
    Jul 19, 2009
    Messages:
    320
    собственно вопрос заключается в том, чтобы проверить есть ли поддержка расширенных функций процессором
    те что eax = 0x80000000 и выше

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

    Clerk Забанен

    Blog Posts:
    0
    Joined:
    Jan 4, 2008
    Messages:
    6,689
    Location:
    РБ, Могилёв
    Code (Text):
    1. CPUID(0x00000000).EAX
    Это максимальный номер функции, который может быть вызван, +1 не валидный. Например у меня(P4):
    CPUID(0x00000000).Eax = 3
    CPUID(0x80000000).Eax = 0x80000008
    Интел проверяет следующим образом:
    Code (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

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