Programowanie w języku Assembler

CPUID

  • 6 komentarzy
  • 3192 odsłony
  • Oceń ten tekst jako pierwszy
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

6 komentarzy

PhysX 2007-04-28 18:15

Ś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

black_coder 2005-12-19 12:47

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

Wolverine 2005-02-23 11:37

A nie od 486? o_O

abuladin 2005-02-10 08:51

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

Dryobates 2004-03-16 18:56

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.

my_nick 2004-03-16 18:35

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