CPUID

kzaj

CPUID (opcode 0FH,0A2H) jest dostepna od procesorów 586. Aby sprawdzić, czy jest obsługiwana trzeba sprawdzić, czy bit 21 rejestru FLAGS jest modyfikowalny. Proponuję kod asma następujący:

  PUSHFD
  POP     EAX
  XOR     EAX, 000200000H         ;NOTUJEMY FLAGE ID, ZEBY SPRAWDZIC CZY JEST CPUID
  PUSH    EAX
  POPFD
  PUSHFD
  POP     ECX
  CMP     EAX, ECX
  JZ      MAMY_CPUID

Jak wiemy, czy CPUID jest obsługiwane, możemy je wykonać. Numer funkcji podajemy w rejestrze EAX. Funkcje są następujące:

Funkcja 0:
Na wyjściu: EAX to maksymalny numer funkcji (opiszę tylko 0 i 1, po prostu nie znam innych :( )
ECX:EBX:EDX - w ASCII nazwa producenta (AuthenticAMD dla AMD, GenuineIntel - Intel, RiseRiseRise - Rise, SiS SiS SiS dla Sis)
Funkcja 1:
EAX - struktura o następującym formacie:
bity 3..0 - wersja procy
bity 7..4 - model
bity 11..8 - rodzina
bity 13..12 - typ procesora (00 - original OEM processor, 01 - OverDrive, 10 - Dual, 11 - zarezerwowane).
bity 15..14 - zarezerwowane
bity 19..16 - rozszerzony model (extended model) - INTEL
bity 27..20 - rozszerzona rodzinal (extended family) - INTEL
bity 31..28 - zarezerwowane

po bitach 11-4 można rozpoznać nzawę procesora. Poszukaj w internecie tabel dla tego, ja mam dawno nieaktualną.

              EDX  - tablica z obsługiwanymi funkcjami procesora:

0 Floating Point Unit
1 Virtual Mode Extensions
2 Debugging Extensions
3 Page Size Extensions 4MB
4 Time Stamp Counter
5 Model Specific Registers
6
PAE (Physical Address Extension)

7 Machine Check Exception
8 CMPXCHG8B Instruction
9 APIC
11 SYSENTER / SYSEXIT Instruction
12 Memory Type Range Registers
13 Page Global Enable
14 Machine Check Architecture
15 Conditional Move Instruction
16 Page Attribute Table
17 36 bit Page Size Extensions
18 Processor Serial Number

19 CLFLUSH Instruction Supported

21 Debug Store

22 Thermal Monitor and Software Controlled Clock

23 MMX Instruction
24
FXSR (Fast Floating Point SAve and Restore)

25
Streaming SIMD Extensions

26 Streaming SIMD Extensions 2
27
Self Snoop
28
Hyper Threading Technology
29
Thermal Monitor Supported
31
Signal Break on FERR

9 komentarzy

Dzieki cpuid mozna zrobic program ktory uruchomi sie tylko na Intelu.

Thanks for this, but I still have a hard time understanding everything.

Through this post, I know that your good knowledge in playing with all the pieces was very helpful. I notify that this is the first place where I find issues I've been searching for. You have a clever yet attractive way of writing. Keto Diet

Świetny opis CPUID po angielsku http://www.sandpile.org/ia32/cpuid.htm

w 486 CPUID było wprowadzone z tego co pamiętam

w tasmie można wybrać proca w trybie zgodności z masmem → .586
albo P586N

chyba 586 - TASM przy dyrektywie .586P zwraca "Invalid instruction for currently selected processor(s)"

A nie od 486? o_O

www.google.com -> OPCODES.LST - tam sa opisane dalsze funkcje
http://tb.infogem.com.pl/cpuid.html - tez troszke jest

W tagach 'asm' umiescilem kod. Mam nadzieje, ze nie kloci sie to z twoja wizja formatowania (chociaz do kapitalikow nie bardzo pasuje :( )
Szkoda, ze skupiles sie jedynie na procesorach Intela (SSE jest ale 3DNow brak). Chociaz akurat obecne procesory AMD obsluguja takze SSE.

Nieco formatowania tylko dodaj dla większej czytelności i będzie super.