Syteminformationen
-
Hallo,
ich habe mal ein paar Fragen:
Wie kann ich die Systeminformationen (CPU, GPU, ...) auslesen?Danke schonmal im Vorraus.
Mfg
-
Informationen über die CPU gibt dir die Instruktuin cpuid: http://www.lowlevel.eu/wiki/CPUID
-
Danke für die schnelle Antwort.
Aber wie gebe ich die Register eax, ebx, ecx, edx aus?
Wenn ichmov si,eax call print_string
mache und mit nasm assembliere, kommt Invalid combination of opcode and operands.
-
Ist ja klar, du kannst schlecht ein 32-Bit-Register (EAX) in ein 16-Bit-Register schieben. Außerdem ist der Vendor-String nicht nullterminiert, d.h. mir normalen Ausgabe-Routinen wirst du ihn kaum ausgeben können.
So ungefähr müsste es gehen (NASM):
vendor db ' ', 0 ;12 Zeichen für Vendor-String und \0 um ausgeben zu können print_vendor: ;pushad ;Register sichern xor eax, eax ;eax auf 0 setzen cpuid mov dword [vendor], ebx mov dword [vendor+4], edx mov dword [vendor+8], ecx mov si, vendor call print_string ;popad ;Register widerherstellen ret
Falls in den E*X-Registern was wichtiges steht, was während des Funktions-Aufrufes nicht verloren gehen darf einfach das pushad und popad wieder einkommentieren.
-
Danke jetzt funktionierts.
Also ich wollte den CPU-Namen ausgeben lassen:
mov eax, 0x8000_0002 cpuid
Ist es normal, dass er mir dann InteInteInteInte)2 D)2 D)2 D)2 D8400840084008400 ausgibt? Soll das der CPU-Name sein?
-
Öhm, nein, das ist nicht normal. ~~Du machst es irgendwo beim speichern des Namens aus den Registern in den Buffer falsch. Zeig mal deinen Code.~~EDIT: Quatsch, mein Fehler, du versuchst anscheinend eher E*X jeweils 4x hintereinander in den String zu schreiben, das geht natürlich nicht.
Der Name setzt sich in 0x8000_0003 und 0x8000_0004 fort. Du musst es so machen:- 0x8000_0002 aufrufen.
- EAX, EBX, ECX, und EDX in nacheinander in den Buffer kopieren.
- 0x8000_0003 aufrufen.
- siehe 2.
- 0x8000_0004 aufrufen.
- siehe 2.
- ggf. noch Nullterminieren (bin mir grad nicht sicher ob der String schon fertig terminiert ist
-
BTW: Der Name setzt sich in 0x80000_0003 und 0x8000_0004 fort.
Ja, dass der Name bei 0x80000_0003 und 0x8000_0004 weitergeht, weiß ich.
Ich hab den fehler entdeckt:mov dword [vendor],eax mov dword [vendor+4],eax mov dword [vendor+8],eax mov dword [vendor+12],eax
statt
mov dword [vendor],eax mov dword [vendor+4],ebx mov dword [vendor+8],ecx mov dword [vendor+12],edx
-
Weis noch jemand, wie man Systeminformationen mit Assembler anzeigen kann?