Из документации AMD64 Architecture Programmer’s Manual Volume 3:General-Purpose and System Instructions получается если этот бит нельзя перезаписать то собрать информацию о процессоре нельзя ? код на FASM Код (ASM): format PE64 console include 'win64a.inc' section '.text' code readable executable pushfq pop rax mov rbx,rax mov rcx,1 shl rcx,21 or rax,rcx push rax popfq pushfq pop rax cmp rbx,rax jne showmsg stop: invoke Sleep,5000 jmp stop showmsg: sub rsp,8 invoke GetStdHandle,STD_OUTPUT_HANDLE invoke WriteConsoleA,rax,addr cpuinf,15,addr numb,0 halt: invoke Sleep,5000 jmp halt section '.data' data readable writeable cpuinf db 'CPUID_SUPPORTED' numb dd 0 section '.idata' import data readable writeable library kernel32,'kernel32.dll',\ user32,'user32.dll' include 'api\kernel32.inc' include 'api\user32.inc' --- Сообщение объединено, 2 апр 2023 --- информация о поддерживаемых инструкциях
Имхо проверять на cpuid в наши дни бесполезно - инструкцию поддерживают все процессоры с 1993-года. А вот определить вендора Intel/AMD не помешало-бы, т.к. некоторые коды расширенных функций cpuid у них разные. Раньше был трюк с флагом(ZF), интересно работает-ли он сейчас? Суть в том, что если до операции деления DIV взвести флаг(ZF), то после Intel сбрасывает его, а AMD не трогает. Так можно было вычислить производителя - вот пример (у меня Intel, тч проверить AMD не могу): Код (ASM): format pe64 console include 'win64ax.inc' entry start ;//---------- section '.data' data readable writeable intel db ' Intel',0 amd db ' AMD',0 ;//---------- section '.code' code readable executable start: frame xor edx,edx ;// взводим ZF mov eax,5 mov ebx,2 div ebx mov eax,intel jz @prn ;// проверить вендора mov eax,amd @prn: cinvoke printf,eax cinvoke _getch cinvoke exit,0 endf ;//---------- section '.idata' import data readable library msvcrt,'msvcrt.dll' include 'api\msvcrt.inc'
Marylin, нет --- Сообщение объединено, 8 апр 2023 --- максимальное значение в регистре eax перед вызовом cpuid ?
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.
Из расширенных функций Intel не использует значения выше EAX=8000_0008h, а вот AMD идёт дальше от EAX=8000_000Ah, и вплоть до EAX=8000_0026h. Но даже на уровне базовых fn имеются некоторые отличия. Код (Text): Intel_EAX[2:4] = TLB, Cache L1,2,3 AMD_EAX[2:4] = Reserved Intel_EAX[9:D] = DCA,PerfMon,x2APIC,XSAVE AMD_EAX[8:C] = Reserved Intel_EAX[8000_0005] = Reserved AMD_EAX[8000_0005] = TLB, Cache L1 --------------------------------------------------------- AMD ext.func (Intel не использует их) --------------------------------------------------------- 8000_0009h - Reserved 8000_000Ah - SVM Features (супервизор хард-виртуализации) 8000_000Bh - 8000_0018h — Reserved 8000_0019h - TLB Characteristics for 1GB pages 8000_001Ah - Instruction Optimizations 8000_001Bh - Instruction-Based Sampling Capabilities 8000_001Ch - Lightweight Profiling Capabilities 8000_001Dh - Cache Topology Information 8000_001Eh - Processor Topology Information 8000_001Fh - Encrypted Memory Capabilities 8000_0020h - Platform QoS Extended Features 8000_0021h - Extended Feature Identification 2 8000_0022h - Extended Performance Monitoring and Debug 8000_0023h - Multi-Key Encrypted Memory Capabilities 8000_0024h - 8000_0025h — Reserved 8000_0026h - Extended CPU Topology
хреново, что только дампы выводит, без их расшифровки. я когда-то пытался собрать под один капот Intel+AMD, но т.к. для тестов так и не нашёл процик AMD, то остановился только на Intel.
в официальной документации до EAX=8000_0022h AMD64 Architecture Programmer’s Manual Volume 3: General-Purpose and System Instructions