07FF780 push ebp 007FF781 mov ebp, esp 007FF783 sub esp, 00000014 007FF786 push ebx 007FF787 push esi 007FF788 mov esi, 00000003 007FF78D mov [ebp-04], 00000001 007FF794 xor eax, eax 007FF796 cpuid # returns Vendor string in ebx/ecx/edx 007FF798 mov dword ptr [ebp-14], ebx 007FF79B mov dword ptr [ebp-10], edx 007FF79E mov dword ptr [ebp-0C], ecx 007FF7A1 mov [ebp-08], 00 007FF7A5 cmp eax, 00000004 007FF7A8 jl 007FF7BD 007FF7AA mov eax, 00000004 007FF7AF xor ecx, ecx 007FF7B1 cpuid # returns Deterministic Cache Parameters 007FF7B3 shr eax, 1A # Max. number of processor cores -1 007FF7B6 and eax, 0000003F 007FF7B9 inc eax # Now, eax = Max. number of processor cores 007FF7BA mov dword ptr [ebp-04], eax 007FF7BD lea eax, dword ptr [ebp-14] 007FF7C0 push 00AEAEB0 # Pointer to string "GenuineIntel" 007FF7C5 push eax 007FF7C6 call 009DCDE0 # compare vendor string with "GenuineIntel" 007FF7CB add esp, 00000008 007FF7CE test eax, eax # is it "GenuineIntel"? 007FF7D0 jne 007FF7E5 # No? then test for AMD... # It's an Intel CPU 007FF7D2 mov edx, dword ptr [ebp-04] # number of CPU cores 007FF7D5 mov ecx, 00000001 007FF7DA cmp ecx, edx # cores > 1 ? 007FF7DC pop esi 007FF7DD sbb eax, eax # eax := (cores > 1) ? -1 : 0 007FF7DF pop ebx 007FF7E0 inc eax # eax := (cores > 1) ? 0 : 1 007FF7E1 mov esp, ebp 007FF7E3 pop ebp 007FF7E4 ret # return eax as the result. # It's not an Intel CPU 007FF7E5 lea edx, dword ptr [ebp-14] 007FF7E8 push 00AEAEA0 # Pointer to string "AuthenticAMD" 007FF7ED push edx 007FF7EE call 009DCDE0 007FF7F3 add esp, 00000008 007FF7F6 test eax, eax # is it "AuthenticAMD"? 007FF7F8 mov eax, 00000002 # eax := 2 007FF7FD je 007FF801 007FF7FF mov eax, esi # eax := 3 (if not "AuthenticAMD") 007FF801 pop esi 007FF802 pop ebx 007FF803 mov esp, ebp 007FF805 pop ebp 007FF806 ret # return eax as the result.