64Bit Fähigkeit der CPU abfragen

Für allgemeine Fragen zur Programmierung mit PureBasic.
smateja
Beiträge: 250
Registriert: 25.11.2004 19:51
Computerausstattung: Alienware Aurora / Intel Core i7 CPU @ 2.8 GHz / 64 Bit OS

64Bit Fähigkeit der CPU abfragen

Beitrag von smateja »

Hallo zusammen,

ich suche eine Möglichkeit, abzufragen ob die CPU 64 BIT unterstützt.
Gibt es hierfür eine API Geschichte? Bitte nicht verwechseln mit OS 64 Bit - das hab ich bereits gefunden.

Danke im Voraus und LG
PB 4.6 / 32 Bit / 64 Bit
Benutzeravatar
Helle
Beiträge: 566
Registriert: 11.11.2004 16:13
Wohnort: Magdeburg

Re: 64Bit Fähigkeit der CPU abfragen

Beitrag von Helle »

Eine API dürfte wohl auch nur so vorgehen:

Code: Alles auswählen

; Test, ob die CPU 64-Bit-fähig ist
;- zuerst Test, ob der CPUID-Befehl überhaupt vom Prozessor verarbeitet werden kann
;- ist möglich, wenn Bit21 des EFlag-Registers verändert werden kann
;- wer dies unter einem 64-Bit-Betriebssystem testet ist selber Schuld!
!pushfd                                     ;das EFlag-Register (32-Bit) auf den Stack
!pop eax                                    ;rein in EAX
!mov edx,eax                                ;EAX unverändert lassen
!xor edx,00000000001000000000000000000000b  ;Bit21 kippen 
!push edx                          
!popfd                                      ;in EFlag schreiben
!pushfd                                     ;wieder auf Stack
!pop edx
!push eax                                   ;alten Wert wieder herstellen
!popfd   
!cmp eax,edx
!jne Is_CPUID                               ;sind nicht gleich -> CPUID ist möglich

 MessageRequester("Status", "Der getestete Prozessor unterstützt den CPUID-Befehl nicht und somit auch nicht die 64-Bit-Erweiterung !")
 End
 
!Is_CPUID:
!mov eax,80000000h                          ;Test ob erweiterte Funktionen verfügbar
!cpuid
!cmp eax,80000001h                          ;80000001h wird benötigt
!jb No_64                                   ;keine erweiterten Funktionen verfügbar
!mov eax,80000001h
!cpuid
!test edx,00100000000000000000000000000000b ;Test auf Bit29. Ist gesetzt wenn 64-Bit fähig.
!jz No_64

Is_64_Bit$ = ""
!jmp Is_64

!No_64:
Is_64_Bit$ = " nicht"

!Is_64:

MessageRequester("Status", "Der getestete Prozessor unterstützt die 64-Bit-Erweiterung" + Is_64_Bit$ + "!")

Viel Spaß!
Helle
Antworten