CPUID
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:
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
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
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



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
http://tb.infogem.com.pl/cpuid.html - tez troszke jest
Szkoda, ze skupiles sie jedynie na procesorach Intela (SSE jest ale 3DNow brak). Chociaz akurat obecne procesory AMD obsluguja takze SSE.