//delphi ile cpu bilgilerinin alınması
const ID_BIT = $200000; // EFLAGS ID bit type TCPUID = array[1..4] of Longint; TVendor = array [0..11] of char;
function IsCPUID_Available : Boolean; asm MOV Result,False {Set initial result to false} 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 Result,True {Result=True} @exit: end;
function GetCPUID(Index : Integer) : TCPUID; asm PUSH EBX {Save affected register} PUSH EDI MOV EDI,Result {Move result to EDI} MOV EAX,Index DW $A20F {CPUID Command we can use CPUID}
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; asm PUSH EBX {Save affected register} PUSH EDI MOV EDI,Result mailto:%7b@Result - {@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 S : TCPUID; I : Cardinal; begin Memo1.Clear; if IsCPUID_Available then begin for I:=0 to 3 do begin S:=GetCPUID(I); Memo1.Lines.Add(Format('%x-%x-%x-%x',[S[1],S[2],S[3],S[4]])); end; for I:=$80000000 to $80000003 do begin S:=GetCPUID(I); Memo1.Lines.Add(Format('%x-%x-%x-%x',[S[1],S[2],S[3],S[4]])); end; Memo1.Lines.Add(GetCPUVendor) end else Memo1.Lines.Add('CPUID Not available') end;
------------- http://www.kasatakip.com - Kasa Takip | http://www.caritakip.com - Cari Takip | http://www.evraktakip.com - Evrak Takip | http://www.etasqlmobil.com - ETA SQL Mobil
|