AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi CPU-ID Format / die 0 soll unterdrücken
Thema durchsuchen
Ansicht
Themen-Optionen

CPU-ID Format / die 0 soll unterdrücken

Ein Thema von taktaky · begonnen am 24. Aug 2007 · letzter Beitrag vom 24. Aug 2007
 
taktaky
(Gast)

n/a Beiträge
 
#3

Re: CPU-ID mit diesem Code stimmt nicht !

  Alt 24. Aug 2007, 17:40
Hi

ich habe den falschen Code gegeben, sorry

Hier ist der Code


Delphi-Quellcode:
const
ID_BIT = $200000; // EFLAGS ID bit
type
TCPUID = array[1..4] of Longint;
TVendor = array [0..11] of char;

function IsCPUID_Available : Boolean; register;
asm
PUSHFD {direct access to flags no possible, only via stack}
POP EAX {flags to EAX}
MOV EDX,EAX {save current flags}
XOR EAX,ID_BIT {not ID bit}
PUSH EAX {onto stack}
POPFD {from stack to flags, with not ID bit}
PUSHFD {back to stack}
POP EAX {get back to EAX}
XOR EAX,EDX {check if ID bit affected}
JZ @exit {no, CPUID not availavle}
MOV AL,True {Result=True}
@exit:
end;

function GetCPUID : TCPUID; assembler; register;
asm
PUSH EBX {Save affected register}
PUSH EDI
MOV EDI,EAX {@Resukt}
MOV EAX,1
DW $A20F {CPUID Command}
STOSD {CPUID[1]}
MOV EAX,EBX
STOSD {CPUID[2]}
MOV EAX,ECX
STOSD {CPUID[3]}
MOV EAX,EDX
STOSD {CPUID[4]}
POP EDI {Restore registers}
POP EBX
end;

function GetCPUVendor : TVendor; assembler; register;
asm
PUSH EBX {Save affected register}
PUSH EDI
MOV EDI,EAX {@Result (TVendor)}
MOV EAX,0
DW $A20F {CPUID Command}
MOV EAX,EBX
XCHG EBX,ECX {save ECX result}
MOV ECX,4
@1:
STOSB
SHR EAX,8
LOOP @1
MOV EAX,EDX
MOV ECX,4
@2:
STOSB
SHR EAX,8
LOOP @2
MOV EAX,EBX
MOV ECX,4
@3:
STOSB
SHR EAX,8
LOOP @3
POP EDI {Restore registers}
POP EBX
end;


procedure TForm1.Button1Click(Sender: TObject);
var
CPUID : TCPUID;
I : Integer;
S : TVendor;
begin
for I := Low(CPUID) to High(CPUID) do CPUID[I] := -1;
if IsCPUID_Available then begin
CPUID := GetCPUID;
Memo1.Lines.Add('CPUID[1] = ' + IntToHex(CPUID[1],8));
Memo1.Lines.Add('CPUID[2] = ' + IntToHex(CPUID[2],8));
Memo1.Lines.Add('CPUID[3] = ' + IntToHex(CPUID[3],8));
Memo1.Lines.Add( 'CPUID[4] = ' + IntToHex(CPUID[4],8));
Memo1.Lines.Add('PValue = '+ IntToStr(CPUID[1] shr 12 and 3));
Memo1.Lines.Add( 'FValue = '+IntToStr(CPUID[1] shr 8 and $f));
Memo1.Lines.Add( 'MValue = '+IntToStr(CPUID[1] shr 4 and $f));
Memo1.Lines.Add( 'SValue = '+IntToStr(CPUID[1] and $f));
S := GetCPUVendor;
Memo1.Lines.Add( 'Vendor: ' + S); end
else begin
Memo1.Lines.Add( 'CPUID not available');
end;
end;
Die Frage: Warum zeigt der Code die CPU-ID so geteilt?
Ich habe einen anderes Programm zeigt die CPU ID wie folgt :
68C387F9FF

der Code Oben zeigt aber die ID geteilt so :

CPUID[1] = 0000068A
CPUID[2] = 00000002
CPUID[3] = 00000000
CPUID[4] = 0387F9FF
PValue = 0
FValue = 6
MValue = 8
SValue = 10
Vendor: GenuineIntel

wie und wo muss ich den Code ändern, damit das Ergebnis bekomme: 68C387F9FF
Ich meine wie addiere ich sie?

Gruß
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz