| 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 | |
| − | pushfd | + | pop ecx |
| − | pop ecx | + | mov eax, ecx |
| − | mov eax, ecx | + | |
| − | xor eax, 0x200000 | + | ; Invertiere das ID-Flag |
| − | push eax | + | xor eax, 0x200000 |
| − | popfd | + | |
| − | + | ; Lade EAX nach EFLAGS | |
| − | + | push eax | |
| − | + | popfd | |
| − | + | ||
| − | + | ; Wenn CPUID unterstützt wird, wird das geänderte ID-Flag übernommen | |
| − | + | ; Ansonsten wird bleibt das alte ID-Flag bestehen | |
| − | + | ||
| − | jmp cpu_supported | + | ; 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. | ||