Инструкция CPUID

Тема в разделе "FASM", создана пользователем Entropy, 2 апр 2023.

  1. Entropy

    Entropy Member

    Публикаций:
    0
    Регистрация:
    23 авг 2020
    Сообщения:
    175
    Из документации AMD64 Architecture Programmer’s Manual Volume 3:General-Purpose and System Instructions
    получается если этот бит нельзя перезаписать то собрать информацию о процессоре нельзя ?

    код на FASM

    Код (ASM):
    1.  
    2. format PE64 console
    3.  
    4. include 'win64a.inc'
    5.  
    6.  
    7.  
    8. section '.text' code readable executable
    9.  
    10. pushfq
    11. pop rax
    12.  
    13. mov rbx,rax
    14.  
    15. mov rcx,1
    16. shl rcx,21
    17. or rax,rcx
    18.  
    19. push rax
    20. popfq
    21.  
    22. pushfq
    23. pop rax
    24. cmp rbx,rax
    25. jne showmsg
    26.  
    27.  
    28. stop:
    29. invoke Sleep,5000
    30. jmp stop
    31.  
    32.  
    33. showmsg:
    34. sub rsp,8
    35. invoke GetStdHandle,STD_OUTPUT_HANDLE
    36. invoke WriteConsoleA,rax,addr cpuinf,15,addr numb,0
    37.  
    38.  
    39. halt:
    40. invoke Sleep,5000
    41. jmp halt
    42.  
    43.  
    44.  
    45.  
    46. section '.data' data readable writeable
    47.  
    48. cpuinf db 'CPUID_SUPPORTED'
    49.  
    50. numb dd 0
    51.  
    52.  
    53. section '.idata' import data readable writeable
    54.  
    55. library kernel32,'kernel32.dll',\
    56.         user32,'user32.dll'
    57.  
    58. include 'api\kernel32.inc'
    59. include 'api\user32.inc'
    60.  
    --- Сообщение объединено, 2 апр 2023 ---
    информация о поддерживаемых инструкциях
     
  2. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    139
    Имхо проверять на cpuid в наши дни бесполезно - инструкцию поддерживают все процессоры с 1993-года. А вот определить вендора Intel/AMD не помешало-бы, т.к. некоторые коды расширенных функций cpuid у них разные. Раньше был трюк с флагом(ZF), интересно работает-ли он сейчас? Суть в том, что если до операции деления DIV взвести флаг(ZF), то после Intel сбрасывает его, а AMD не трогает. Так можно было вычислить производителя - вот пример (у меня Intel, тч проверить AMD не могу):

    Код (ASM):
    1. format   pe64 console
    2. include 'win64ax.inc'
    3. entry    start
    4. ;//----------
    5. section '.data' data readable writeable
    6. intel     db  ' Intel',0
    7. amd       db  ' AMD',0
    8. ;//----------
    9. section '.code' code readable executable
    10. start:
    11. frame
    12.         xor      edx,edx     ;// взводим ZF
    13.         mov      eax,5
    14.         mov      ebx,2
    15.         div      ebx
    16.  
    17.         mov      eax,intel
    18.         jz       @prn        ;// проверить вендора
    19.         mov      eax,amd
    20. @prn:  cinvoke   printf,eax
    21.  
    22.        cinvoke  _getch
    23.        cinvoke   exit,0
    24. endf
    25. ;//----------
    26. section '.idata' import data readable
    27. library  msvcrt,'msvcrt.dll'
    28. include  'api\msvcrt.inc'
     
    R81..., q2e74, Mikl___ и ещё 1-му нравится это.
  3. Entropy

    Entropy Member

    Публикаций:
    0
    Регистрация:
    23 авг 2020
    Сообщения:
    175
    сомневаюсь
     
  4. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    139
    у вас AMD? можно-же проверить исходник выше.
     
  5. Entropy

    Entropy Member

    Публикаций:
    0
    Регистрация:
    23 авг 2020
    Сообщения:
    175
    Marylin, нет
    --- Сообщение объединено, 8 апр 2023 ---
    максимальное значение в регистре eax перед вызовом cpuid ?
     
  6. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.741
    Intel: CPUID.EAX = 80000008H (* Returns virtual/physical address size data. *)
    AMD: Some processors, identified by CPUID Fn8000_0021_EAX[AutomaticIBRS] (bit 8) = 1, support Automatic IBRS.
    AMD: CpuidUserDis. Bit 35. Setting this bit to 1 causes #GP(0) when the CPUID instruction is executed by non-privileged software (CPL > 0) outside SMM. Support for the CPUID User Disable feature is indicated by CPUID Fn80000021_EAX[CpuidUserDis]=1.
    AMD: Extended functions return information about AMD-specific features such as long mode and the presence of features such as support for the FMA4 and XOP instruction subsets. Extended function numbers are in the range 8000_0000h–8000_FFFFh.
     
  7. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    139
    Из расширенных функций Intel не использует значения выше EAX=8000_0008h, а вот AMD идёт дальше от EAX=8000_000Ah, и вплоть до EAX=8000_0026h. Но даже на уровне базовых fn имеются некоторые отличия.
    Код (Text):
    1.  
    2. Intel_EAX[2:4] = TLB, Cache L1,2,3
    3.   AMD_EAX[2:4] = Reserved
    4.  
    5. Intel_EAX[9:D] = DCA,PerfMon,x2APIC,XSAVE
    6.   AMD_EAX[8:C] = Reserved
    7.  
    8. Intel_EAX[8000_0005] = Reserved
    9.   AMD_EAX[8000_0005] = TLB, Cache L1
    10.  
    11. ---------------------------------------------------------
    12. AMD ext.func    (Intel не использует их)
    13. ---------------------------------------------------------
    14. 8000_0009h - Reserved
    15. 8000_000Ah - SVM Features (супервизор хард-виртуализации)
    16. 8000_000Bh - 8000_0018h — Reserved
    17. 8000_0019h - TLB Characteristics for 1GB pages
    18. 8000_001Ah - Instruction Optimizations
    19. 8000_001Bh - Instruction-Based Sampling Capabilities
    20. 8000_001Ch - Lightweight Profiling Capabilities
    21. 8000_001Dh - Cache Topology Information
    22. 8000_001Eh - Processor Topology Information
    23. 8000_001Fh - Encrypted Memory Capabilities
    24. 8000_0020h - Platform QoS Extended Features
    25. 8000_0021h - Extended Feature Identification 2
    26. 8000_0022h - Extended Performance Monitoring and Debug
    27. 8000_0023h - Multi-Key Encrypted Memory Capabilities
    28. 8000_0024h - 8000_0025h — Reserved
    29. 8000_0026h - Extended CPU Topology
    30.  
     
    Mikl___ нравится это.
  8. alex_dz

    alex_dz Active Member

    Публикаций:
    0
    Регистрация:
    26 июл 2006
    Сообщения:
    377
    R81..., Mikl___ и Marylin нравится это.
  9. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    139
    хреново, что только дампы выводит, без их расшифровки.
    я когда-то пытался собрать под один капот Intel+AMD, но т.к. для тестов так и не нашёл процик AMD, то остановился только на Intel.
    Screen.png
     

    Вложения:

    • CPUID.ZIP
      Размер файла:
      2,8 КБ
      Просмотров:
      126
    Artyomka, R81..., Mikl___ и 2 другим нравится это.
  10. Entropy

    Entropy Member

    Публикаций:
    0
    Регистрация:
    23 авг 2020
    Сообщения:
    175
    в официальной документации до
    EAX=8000_0022h AMD64 Architecture
    Programmer’s Manual
    Volume 3:
    General-Purpose and
    System Instructions
     
  11. Marylin

    Marylin Active Member

    Публикаций:
    0
    Регистрация:
    17 фев 2023
    Сообщения:
    139
    Пора-бы доки обновить:

    AMD.jpg
     
  12. Entropy

    Entropy Member

    Публикаций:
    0
    Регистрация:
    23 авг 2020
    Сообщения:
    175
    Marylin, сорри,облажался