Forum: PC-Programmierung x86 CPUID Verfügbarkeit Überprüfen


von Chris (Gast)


Lesenswert?

Guten Abend,
ich versuche eine Funktion zu schreiben die feststellt ob die CPU den 
CPUID-Befehl unterstützt.
Das Problem ist das die Funktion "no_cpuid" aufgerufen wird obwohl der 
Befehl unterstützt wird.
1
check_cpuid:
2
    pushfl
3
    pop %eax
4
5
    mov %eax, %ecx
6
7
    xor $0x00200000, %eax
8
9
    push %eax
10
    popfl
11
12
    pushfl
13
    pop %eax
14
15
    push %ecx
16
    popfl
17
18
    cmp %eax, %ecx
19
    je no_cpuid
20
    ret

von Jasper (Gast)


Lesenswert?

Beim obigen Python Code scheint mir die Einrückung nicht ganz stimmig zu 
sein. Ich bin allerdings noch Python Anfänger ☺️

von Εrnst B. (ernst)


Lesenswert?

Chris schrieb:
> Das Problem ist das die Funktion "no_cpuid" aufgerufen wird obwohl der
> Befehl unterstützt wird.

Du rufst den CPUID-Befehl ja garnicht auf, insofern ist es egal ob er 
unterstützt wird oder nicht. Und der Label-Name "no_cpuid" trifft ja 
jetzt keine Aussage, ob er für "cpuid nicht ausgeführt" oder "cpuid 
nicht vorhanden" stehen soll.


Edit: Ah, I see...

Du versuchst testweise an den EFLAGS zu drehen, und wenn das 21ste Bit 
schreibbar ist, wird die CPU wohl neu genug sein, um auch CPUID zu 
verstehen?
1
    pushfd 
2
    pushfd
3
    xor dword [esp],0x00200000 
4
    popfd 
5
    pushfd 
6
    pop eax
7
    xor eax,[esp] 
8
    popfd 
9
    and eax,0x00200000
--> eax = 0x0 wenn Bit21 nicht schreibbar

Evtl. auch interessant: Wie der GCC das per inline-ASM macht:

https://github.com/gcc-mirror/gcc/blob/master/gcc/config/i386/cpuid.h#L247

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.