
Code: Alles auswählen
;- Prozessor-String mittels CPUID direkt auslesen
;- erstellt einen UNICODE-String! (Oder, was ich dafür halte)
;- Also dementsprechende Einstellung vornehmen!
;- "Helle" Klaus Helbing, 25.06.2007, PB v4.02
Procedure Get_Prozessor_String_W(StringAdresse)
!mov eax,80000000h ;Test, ob CPU aktuell genug ist um den String zu liefern
!cpuid
!cmp eax,80000004h
!jae @f ;alles o.K.
!xor eax,eax ;Rückgabewert = Null für eventuelle Auswertung Fehlschlag
ProcedureReturn
!@@:
!mov esi,[p.v_StringAdresse]
!xor edi,edi
!pxor xmm7,xmm7
!@@:
!mov eax,80000002h
!add eax,edi
!cpuid
!movd xmm0,eax
!punpcklbw xmm0,xmm7 ;wenn die CPU obigen Test bestanden hat, sollte auch dies funktionieren (SSE2)
!movq [esi],xmm0
!movd xmm0,ebx
!punpcklbw xmm0,xmm7
!movq [esi+8],xmm0
!movd xmm0,ecx
!punpcklbw xmm0,xmm7
!movq [esi+16],xmm0
!movd xmm0,edx
!punpcklbw xmm0,xmm7
!movq [esi+24],xmm0
!inc edi
!cmp edi,3
!je @f
!add esi,32
!jmp @b
!@@:
!mov byte[esi+32],0 ;Zero-Byte; mal ganz vorbildlich, obwohl hier im speziellen Fall nicht nötig
!mov eax,1 ;Rückgabewert <> Null für Erfolg
ProcedureReturn
EndProcedure
ProzessorString$ = Space(49) ;der String kann max.48 Zeichen lang sein plus ein Zero-Byte zum Abschluss
;ich hoffe, das ist hier so richtig mit der Anzahl
Get_Prozessor_String_W(@ProzessorString$)
MessageRequester("Prozessor-String mittels CPUID auslesen - Unicode-Variante", ProzessorString$)
Unicode ist an mir bisher spurlos vorbeigegangen; wenn´s falsch ist, bitte sagen!
Gruss
Helle