Autor |
Beitrag |
Taktaky
      
Beiträge: 25
|
Verfasst: Fr 24.08.07 20:10
Hallo
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?
Der Code :
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94:
| const ID_BIT = $200000; type TCPUID = array[1..4] of Longint; TVendor = array [0..11] of char;
function IsCPUID_Available : Boolean; register; asm PUSHFD POP EAX MOV EDX,EAX XOR EAX,ID_BIT PUSH EAX POPFD PUSHFD POP EAX XOR EAX,EDX JZ @exit MOV AL,True @exit: end;
function GetCPUID : TCPUID; assembler; register; asm PUSH EBX PUSH EDI MOV EDI,EAX MOV EAX,1 DW $A20F STOSD MOV EAX,EBX STOSD MOV EAX,ECX STOSD MOV EAX,EDX STOSD POP EDI POP EBX end;
function GetCPUVendor : TVendor; assembler; register; asm PUSH EBX PUSH EDI MOV EDI,EAX MOV EAX,0 DW $A20F MOV EAX,EBX XCHG EBX,ECX 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 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; |
Zuletzt bearbeitet von Taktaky am Sa 25.08.07 00:16, insgesamt 1-mal bearbeitet
|
|
Taktaky 
      
Beiträge: 25
|
Verfasst: Fr 24.08.07 21:24
Hi
Es funktioniert
Ich bekomme die erste Nummer "0" dies hat keine Bedeutung für mich und möchte gerne weglassen!
Delphi-Quelltext 1:
| Edit1.Text:=(IntToHex((CPUID[1] + CPUID[2]),8) +IntToHex((CPUID[3]) + (CPUID[4]),8)); |
das Ergebnis ist leider nicht 100% wie ich wollte !
ich bekomme 0000068C 0387F9FF statt 68C387F9FF !!!
Wo liegt das Problem ?
ich bekomme 5 die "0" vorne und "0" nach C ?
Gruß
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Sa 25.08.07 00:26
Ich vermute, du willst die Nullen am Anfang der CPUID[x] weghaben, und zwar so, dass links von der ersten nicht-null keine nullen mehr stehen, richtig? dann versuch's mal so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| For i := 1 To 4 Do Begin While x[i][1] = '0' Do Delete(x[i], 1, 1); Memo1.Lines.Add(x[i]); End; |
Hierbei ist x ein Array[1..4] of String, i ein integer.
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
Taktaky 
      
Beiträge: 25
|
Verfasst: Sa 25.08.07 00:50
Hi
ich habe den Teil wahrscheinlich in den falschen Bereich hinzugefügt, da ich Error bekomme
Bitte wo soll der Teil sein In Code?
Oben habe ich den Code 1 zu 1 hingeschrieben
Danke!
Gruß
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Sa 25.08.07 16:05
Ich meine mal, dass dein anderes Programm die CPU-ID falsch anzeigt, denn die Nullen gehören dort schon hin!
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
Taktaky 
      
Beiträge: 25
|
Verfasst: Sa 25.08.07 16:56
Kroko hat folgendes geschrieben: | Ich meine mal, dass dein anderes Programm die CPU-ID falsch anzeigt, denn die Nullen gehören dort schon hin! |
Ich verstehe leider Deine Antwort nicht !
Gruß
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Sa 25.08.07 19:32
Du liest doch 4 LongInt-Werte aus(eigentlich sollten es Cardinal sein), dass sind 32-Bit und da kann man ja nicht einfach ein paar weglassen, nur weil sie Null sind,
sonst schau mal hier !
Allerdings solltest Du auch vorher testen, ob die ID enabled ist, sonst steht dort nur ...(teste ich im Link leider auch nicht ab), einfachmal hier suchen, dazu gab es schon ein paar Threads.
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
OlafSt
      
Beiträge: 486
Erhaltene Danke: 99
Win7, Win81, Win10
Tokyo, VS2017
|
Verfasst: Mo 27.08.07 11:26
Für mich sieht das aus, als wäre diese (IMHO völlig wertlose) CPUID wie folgt zustandegekommen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| var x,y: Cardinal; s: string; begin X := CPUID[1] + CPUID[2]; Y := CPUID[3] + CPUID[4]; s := IntToHex(X,8) + IntToHex(Y,8); s := StringReplace(s,'0','',[rfReplaceAll]); end; |
Habs nicht konkret ausprobiert...
_________________ Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
|
|
|