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] = 00000
68A
CPUID[2] = 00000002
CPUID[3] = 00000000
CPUID[4] = 0
387F9FF
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ß