معرفة معلومات عن المعالج في الجهاز
#1
PHP كود :
unit main;

interface

uses
 Windows
, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 
StdCtrls, ExtCtrls, Buttons;

type
 Tform1 
= class(TForm)
    
img_info: TImage;
    
Image1: TImage;
    
BitBtn1: TBitBtn;
   
procedure FormShow(Sender: TObject);
 private
   { Private 
declarations }
 public
   { Public 
declarations }
   
procedure info(s1, s2: string);
 
end;

var
 
form1: tform1;
 
gn_speed_y: Integer;
 
gn_text_y: Integer;
const
 
gn_speed_x: Integer = 8;
 
gn_text_x: Integer  = 15;
 
gl_start: Boolean   = True;

implementation

{$R *.DFM}

procedure Tform1.FormShow(Sender: TObject);
var
 
_eax, _ebx, _ecx, _edx: Longword;
 
i: Integer;
 
b: Byte;
 
b1: Word;
 
s, s1, s2, s3, s_all: string;
begin
 
//Set the startup colour of the image
img_info.Canvas.Brush.Color := clblue;
img_info.Canvas.FillRect(rect(0, 0, img_info.Width, img_info.Height));


 
gn_text_y := 5; //position of the 1st text

 
asm                //asm call to the CPUID inst.
   
mov eax,0         //sub. func call
   
db $0F,$A2         //db $0F,$A2 = CPUID instruction
   
mov _ebx,ebx
   mov _ecx
,ecx
   mov _edx
,edx
 end
;

 for 
i := 0 to 3 do   //extract vendor id
 
begin
   b 
:= lo(_ebx);
   
s := s + chr(b);
   
b := lo(_ecx);
   
s1:= s1 + chr(b);
   
b := lo(_edx);
   
s2:= s2 + chr(b);
   
_ebx := _ebx shr 8;
   
_ecx := _ecx shr 8;
   
_edx := _edx shr 8;
 
end;
 
info('CPU', '');
 
info('   - ' + 'Vendor ID: ', s + s2 + s1);

 
asm
   mov eax
,1
   db 
$0F,$A2
   mov _eax
,eax
   mov _ebx
,ebx
   mov _ecx
,ecx
   mov _edx
,edx
 end
;
 
//06B1
 //|0000| |0000 0000| |0000| |00| |00| |0110| |1011| |0001|
 
b := lo(_eax) and 15;
 
info('   - ' + 'Stepping ID: ', IntToStr(b));
 
b := lo(_eax) shr 4;
 
info('   - ' + 'Model Number: ', IntToHex(b, 1));
 
b := hi(_eax) and 15;
 
info('   - ' + 'Family Code: ', IntToStr(b));
 
b := hi(_eax) shr 4;
 
info('   - ' + 'Processor Type: ', IntToStr(b));
 
//31.   28. 27.   24. 23.   20. 19.   16.
 //  0 0 0 0   0 0 0 0   0 0 0 0   0 0 0 0
 
b := lo((_eax shr 16)) and 15;
 
info('   - ' + 'Extended Model: ', IntToStr(b));

 
b := lo((_eax shr 20));
 
info('   - ' + 'Extended Family: ', IntToStr(b));

 
b := lo(_ebx);
 
info('   - ' + 'Brand ID: ', IntToStr(b));
 
b := hi(_ebx);
 
info('   - ' + 'Chunks: ', IntToStr(b));
 
b := lo(_ebx shr 16);
 
info('   - ' + 'Count: ', IntToStr(b));
 
b := hi(_ebx shr 16);
 
info('   - ' + 'APIC ID: ', IntToStr(b));

 
//Bit 18 =? 1     //is serial number enabled?
 
if (_edx and $40000) = $40000 then
   info
('   - ' + 'Serial Number ', 'Enabled')
 else
   
info('   - ' + 'Serial Number ', 'Disabled');

 
s := IntToHex(_eax, 8);
 
asm                  //determine the serial number
   
mov eax,3
   db 
$0F,$A2
   mov _ecx
,ecx
   mov _edx
,edx
 end
;
 
s1 := IntToHex(_edx, 8);
 
s2 := IntToHex(_ecx, 8);
 
Insert('-', s, 5);
 
Insert('-', s1, 5);
 
Insert('-', s2, 5);
 
info('   - ' + 'Serial Number: ', s + '-' + s1 + '-' + s2);

 
asm
   mov eax
,1
   db 
$0F,$A2
   mov _edx
,edx
 end
;
 
info('', '');
 
//Bit 23 =? 1
 
if (_edx and $800000) = $800000 then
   info
('MMX ', 'Supported')
 else
   
info('MMX ', 'Not Supported');

 
//Bit 24 =? 1
 
if (_edx and $01000000) = $01000000 then
   info
('FXSAVE & FXRSTOR Instructions ', 'Supported')
 else
   
info('FXSAVE & FXRSTOR Instructions Not ', 'Supported');

 
//Bit 25 =? 1
 
if (_edx and $02000000) = $02000000 then
   info
('SSE ', 'Supported')
 else
   
info('SSE ', 'Not Supported');

 
//Bit 26 =? 1
 
if (_edx and $04000000) = $04000000 then
   info
('SSE2 ', 'Supported')
 else
   
info('SSE2 ', 'Not Supported');

 
info('', '');

 
asm     //execute the extended CPUID inst.
   
mov eax,$80000000   //sub. func call
   
db $0F,$A2
   mov _eax
,eax
 end
;

 if 
_eax > $80000000 then  //any other sub. funct avail. ?
 
begin
   info
('Extended CPUID: ', 'Supported');
   
info('   - Largest Function Supported: ', IntToStr(_eax - $80000000));
   
asm     //get brand ID
     
mov eax,$80000002
     db 
$0F
     db $A2
     mov _eax
,eax
     mov _ebx
,ebx
     mov _ecx
,ecx
     mov _edx
,edx
   end
;
   
s  := '';
   
s1 := '';
   
s2 := '';
   
s3 := '';
   for 
i := 0 to 3 do
   
begin
     b 
:= lo(_eax);
     
s3:= s3 + chr(b);
     
b := lo(_ebx);
     
s := s + chr(b);
     
b := lo(_ecx);
     
s1 := s1 + chr(b);
     
b := lo(_edx);
     
s2 := s2 + chr(b);
     
_eax := _eax shr 8;
     
_ebx := _ebx shr 8;
     
_ecx := _ecx shr 8;
     
_edx := _edx shr 8;
   
end;

   
s_all := s3 + s + s1 + s2;

   
asm
     mov eax
,$80000003
     db 
$0F
     db $A2
     mov _eax
,eax
     mov _ebx
,ebx
     mov _ecx
,ecx
   mov _edx
,edx
   end
;
   
s  := '';
   
s1 := '';
   
s2 := '';
   
s3 := '';
   for 
i := 0 to 3 do
   
begin
     b 
:= lo(_eax);
     
s3 := s3 + chr(b);
     
b := lo(_ebx);
     
s := s + chr(b);
     
b := lo(_ecx);
     
s1 := s1 + chr(b);
     
b := lo(_edx);
     
s2 := s2 + chr(b);
     
_eax := _eax shr 8;
     
_ebx := _ebx shr 8;
     
_ecx := _ecx shr 8;
     
_edx := _edx shr 8;
   
end;
   
s_all := s_all + s3 + s + s1 + s2;

   
asm
     mov eax
,$80000004
     db 
$0F
     db $A2
     mov _eax
,eax
     mov _ebx
,ebx
     mov _ecx
,ecx
     mov _edx
,edx
   end
;
   
s  := '';
   
s1 := '';
   
s2 := '';
   
s3 := '';
   for 
i := 0 to 3 do
   
begin
     b  
:= lo(_eax);
     
s3 := s3 + chr(b);
     
b := lo(_ebx);
     
s := s + chr(b);
     
b := lo(_ecx);
     
s1 := s1 + chr(b);
     
b  := lo(_edx);
     
s2 := s2 + chr(b);
     
_eax := _eax shr 8;
     
_ebx := _ebx shr 8;
     
_ecx := _ecx shr 8;
     
_edx := _edx shr 8;
   
end;
   
info('Brand String: ', '');
   if 
s2[Length(s2)] = #0 then setlength(s2, Length(s2) - 1);
   
info('', '   - ' + s_all + s3 + s + s1 + s2);
 
end
 
else
   
info('   - Extended CPUID ', 'Not Supported.');
end;

procedure Tform1.info(s1, s2: string);
begin
 
if s1 <> '' then
 begin
   img_info
.Canvas.Brush.Color := clblue;
   
img_info.Canvas.Font.Color  := clyellow;
   
img_info.Canvas.TextOut(gn_text_x, gn_text_y, s1);
 
end;
 if 
s2 <> '' then
 begin
   img_info
.Canvas.Brush.Color := clblue;
   
img_info.Canvas.Font.Color  := clWhite;
   
img_info.Canvas.TextOut(gn_text_x + img_info.Canvas.TextWidth(s1), gn_text_y, s2);
 
end;
 
Inc(gn_text_y, 13);
end;

end. 
[-] كل من 1 user says قال شكرا ل issamdnn على المشاركة المفيدة
  • salmaanga
الرد
#2
اخي انت عقدتها كثيرا على ما اضن فقط
انا احتجت سحب المعلومات عن الجهاز
استعملت الرجيسري
كماتعلم يحوي جميع المعلوماات
كذلك يسهل العملبه من خلال الدلفي
الرد
#3
أخي العزيز الملومات التي يمكن الحصول عليها بواسطة الكود السابق لا يمكن الحصول عليها من خلال مسجل النظام والحقيقة هو الأمر معقد قليلاً .. وإذا كنت قد طبقت الكود السابق كنت أدركت صحة كلامي .. فالمعلومات التي يقدمها الكود السابق هي ما يعطيها البيوس عن المعالج بشكل صحيح ودقيق.


وفقك الله .
الرد
#4
أنا أوافق الأخ issamdnn تماما فى الرأى
لا يجب إطلاقا الوثوق فى محرر السجل فى هذا الخصوص
كثيرا ما يتلاعب بائع نصاب بتلك القيم بغرض الغش
إستخلاص المواصفة من البيوس أضمن

و إن أمكنك أخى ضع المشروع كاملا
الرد
#5
شكرا شباب على المعلومات القيمة
اجل البيوس لا يمكن التلاعب به
لهذا هو ادق
شمعة تحترق من اجل الآخرين
الرد
#6
جميل جدا بارك الله بيك اخي العزيز
سبحان الله و بحمده سبحان الله العظيم
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم