CPU bilgilerinin alınması |
Yanıt Yaz |
Yazar | |
murat turan
Üye Profili
Özel Mesaj Yolla
Bu kullanıcıya ait mesajları bul
Üyenin Web Sitesie Git
Arkadaş Listeme Ekle
Admin Group Datakent Kayıt Tarihi: 01.Ekim.2003 Bulundugu Yer: Turkey Online: Sitede Değil Gönderilenler: 1798 |
Alıntı Cevapla
Konu: CPU bilgilerinin alınması Gönderim Zamanı: 31.Ekim.2008 Saat 12:21 |
//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 {@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; Düzenleyen murat_turan - 31.Ekim.2008 Saat 12:21 |
|
Yanıt Yaz |
Forum Atla | Forum İzinleri Kapalı Foruma Yeni Konu Gönderme Kapalı Forumdaki Konulara Cevap Yazma Kapalı Forumda Cevapları Silme Kapalı Forumdaki Cevapları Düzenleme Kapalı Forumda Anket Açma Kapalı Forumda Anketlerde Oy Kullanma |