Sayfayı Yazdır | Pencereyi Kapat

CPU bilgilerinin alınması

Nereden Yazdırıldığı: Datakent
Kategori: Diğer bölümler
Forum Adı: Borland Delphi
Forum Tanımlaması: Borland Delphi ile ilgili soru / sorun / paylaşım bölümü
URL: http://forum.datakent.com/forum_posts.asp?TID=1553
Tarih: 29.Mart.2024 Saat 01:51


Konu: CPU bilgilerinin alınması
Mesajı Yazan: murat turan
Konu: CPU bilgilerinin alınması
Mesaj Tarihi: 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 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



Sayfayı Yazdır | Pencereyi Kapat