CPUID — Änderungen 6742 → 6756

Zeile 25: Zeile 25:
  
 
Aussehen kann das zum Beispiel so:
 
Aussehen kann das zum Beispiel so:
−
<asm>
+
<asm>; Lade Flags nach ECX und EAX
−
pushfd                ; Sichere Flags
+
pushfd
−
pushfd                 ; Sichere Flags
+
pop ecx
−
pop ecx               ; Lade Flags in ECX
+
mov eax, ecx
−
mov eax, ecx           ; Schiebe Flags in EAX
+
 
−
xor eax, 0x200000     ; Vertausche das ID-Flag
+
; Invertiere das ID-Flag
−
push eax               ; Sichere neue Flags
+
xor eax, 0x200000
−
popfd                 ; Lade neue Flags in EFLAGS
+
 
−
                      ; Wenn CPUID unterstützt wird, wird das geänderte ID-Flag übernommen
+
; Lade EAX nach EFLAGS
−
                      ; Ansonsten wird bleibt das alte ID-Flag bestehen
+
push eax
−
pushfd                ; Sichere Flags
+
popfd
−
pop eax                ; Lade Flags in EAX
+
 
−
xor eax, ecx          ; Vergleiche EAX und ECX
+
; Wenn CPUID unterstützt wird, wird das geänderte ID-Flag übernommen
−
popfd                  ; Stelle Original Flags wieder her
+
; Ansonsten wird bleibt das alte ID-Flag bestehen
−
je cpuid_unsupported  ; EAX und ECX sind gleich, CPUID wird nicht unterstützt!
+
 
−
jmp cpu_supported     ; EAX und ECX sind verschieden, CPUID wird unterstützt!
+
; Lade Flags nach EAX
 +
pushfd
 +
pop eax
 +
 
 +
; Vergleiche vorher(ECX) und nachher(EAX)
 +
; Wenn beide gleich sind, wird CPUID nicht unterstützt
 +
xor eax, ecx
 +
je cpuid_unsupported
 +
jmp cpu_supported
 
</asm>
 
</asm>
 +
  
 
Um den CPUID-Befehl auszuführen, verwendet man einfach den Assemblerbefehl '''CPUID'''. Die Funktionsnummer der CPUID-Funktion wird dabei im '''EAX'''-Register übergeben. Die Rückgabewerte werden in den Registern '''EAX''', '''EBX''', '''EDX''' und '''ECX''' abgelegt.
 
Um den CPUID-Befehl auszuführen, verwendet man einfach den Assemblerbefehl '''CPUID'''. Die Funktionsnummer der CPUID-Funktion wird dabei im '''EAX'''-Register übergeben. Die Rückgabewerte werden in den Registern '''EAX''', '''EBX''', '''EDX''' und '''ECX''' abgelegt.