![]()  | 
 
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: 1797  | 
  
   
        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  |