打印本文 打印本文 关闭窗口 关闭窗口
get CPU id (很全的)
作者:武汉SEO闵涛  文章来源:敏韬网  点击数5966  更新时间:2009/4/23 18:39:23  文章录入:mintao  责任编辑:mintao
r i:=0 to 3 do
   TempCpuName:=TempCpuName+s2[i];
  for i:=0 to 3 do
   TempCpuName:=TempCpuName+s3[i];
  for i:=0 to 3 do
   TempCpuName:=TempCpuName+s4[i];
  for i:=0 to 3 do
   TempCpuName:=TempCpuName+s5[i];
  for i:=0 to 3 do
   TempCpuName:=TempCpuName+s6[i];
  for i:=0 to 3 do
   TempCpuName:=TempCpuName+s7[i];
  for i:=0 to 3 do
   TempCpuName:=TempCpuName+s8[i];
  for i:=0 to 3 do
   TempCpuName:=TempCpuName+s9[i];
  for i:=0 to 3 do
   TempCpuName:=TempCpuName+s10[i];
  for i:=0 to 3 do
   TempCpuName:=TempCpuName+s11[i];
  for i:=0 to 3 do
   TempCpuName:=TempCpuName+s12[i];
  GetExtendedCpuName:=TempCpuName;
end;
function TCpuData.GetExtendedL1DCache:word;
var L1D,TempL1D:dword;
    BinArray:array[0..31] of byte;
    i,p:integer;
begin
asm
  push eax
  push ebx
  push ecx
  push edx
  mov eax,$80000005
  mov ebx,0
  mov ecx,0
  mov edx,0
  db $0F,$A2               /// cpuid
  mov L1D,ecx
  pop edx
  pop ecx
  pop ebx
  pop eax
end;
for i:=0 to 31 do
  begin
   BinArray[i]:=L1D mod 2;
   L1D:=L1D div 2;
  end;
TempL1D:=0;
p:=0;
for i:=24 to 31 do
  begin
   TempL1D:=TempL1D+(BinArray[i]*StrToInt(FloatToStr(Power(2,p))));
   inc(p);
  end;
GetExtendedL1DCache:=TempL1D;
end;
function TCpuData.GetExtendedL1ICache:word;
var L1I,TempL1I:dword;
    BinArray:array[0..31] of byte;
    i,p:integer;
begin
asm
  push eax
  push ebx
  push ecx
  push edx
  mov eax,$80000005
  mov ebx,0
  mov ecx,0
  mov edx,0
  db $0F,$A2               /// cpuid
  mov L1I,edx
  pop edx
  pop ecx
  pop ebx
  pop eax
end;
for i:=0 to 31 do
  begin
   BinArray[i]:=L1I mod 2;
   L1I:=L1I div 2;
  end;
TempL1I:=0;
p:=0;
for i:=24 to 31 do
  begin
   TempL1I:=TempL1I+(BinArray[i]*StrToInt(FloatToStr(Power(2,p))));
   inc(p);
  end;
GetExtendedL1ICache:=TempL1I;
end;
function TCpuData.GetExtendedL2Cache:word;
var L2,TempL2:dword;
    BinArray:array[0..31] of byte;
    i,p:integer;
begin
asm
  push eax
  push ebx
  push ecx
  push edx
  mov eax,$80000006
  mov ebx,0
  mov ecx,0
  mov edx,0
  db $0F,$A2               /// cpuid
  mov L2,ecx
  pop edx
  pop ecx
  pop ebx
  pop eax
end;
for i:=0 to 31 do
  begin
   BinArray[i]:=L2 mod 2;
   L2:=L2 div 2;
  end;
TempL2:=0;
p:=0;
for i:=16 to 31 do
  begin
   TempL2:=TempL2+(BinArray[i]*StrToInt(FloatToStr(Power(2,p))));
   inc(p);
  end;
GetExtendedL2Cache:=TempL2;
end;
function TCpuData.CheckCeleron:Boolean;
var BId:byte;
begin
asm
  push eax
  push ebx
  push ecx
  push edx
  mov eax,1
  db $0F,$A2               /// cpuid
  mov BId,bl
  pop edx
  pop ecx
  pop ebx
  
  pop eax
end;
CheckCeleron:=(BId=$1);
end;
function TCpuData.CheckPentiumIII:Boolean;
var BId:byte;
begin
if CheckMMX and CheckSSE then CheckPentiumIII:=True
else CheckPentiumIII:=False;
end;
function TCpuData.CheckXeon:Boolean;
var BId:byte;
begin
asm
  push eax
  push ebx
  push ecx
  push edx
  mov eax,1
  db $0F,$A2               /// cpuid
  mov BId,bl
  pop edx
  pop ecx
  pop ebx
  pop eax
end;
CheckXeon:=(BId=$3);
end;
function TCpuData.CheckPentium4:Boolean;
var BId:byte;
begin
asm
  push eax
  push ebx
  push ecx
  push edx
  mov eax,1
  db $0F,$A2               /// cpuid
  mov BId,bl
  pop edx
  pop ecx
  pop ebx
  pop eax
end;
CheckPentium4:=(BId=$8);
end;
function TCpuData.CheckIthanium:Boolean;
var res:dword;
    BinArray:array[0..31] of byte;
    i:byte;
begin
asm
  push eax
  push ebx
  push ecx
  push edx
  mov eax,1
  db $0F,$A2               /// cpuid
  mov res,edx
  pop edx
  pop ecx
  pop ebx
  pop eax
end;
for i:=0 to 31 do
  begin
   BinArray[i]:=res mod 2;
   res:=res div 2;
  end;
CheckIthanium:=(CheckPentium4 and (BinArray[30]=1));
end;
function TCpuData.IntelP5N:string;
begin
If CheckMMX then IntelP5N:=''''Intel Pentium(r) MMX(tm)''''
else IntelP5N:=''''Intel Pentium(r)'''';
end;
function TCpuData.IntelP6N:string;
begin
if CheckCeleron then IntelP6N:=''''Intel Celeron(r)''''
else
if CheckPentiumIII then IntelP6N:=''''Intel Pentium(r) III''''
else
if CheckXeon then IntelP6N:=''''Intel Pentium(r) III Xeon(tm)''''
else
if not CheckMMX then IntelP6N:=''''Intel Pentium(r) PRO''''
else IntelP6N:=''''Intel Pentium(r) II'''';  
end;
function TCpuData.AMDK5N:string;
var Family,Model,Stepping:byte;
begin
GetFMS(Family,Model,Stepping);
if Model=0 then AMDK5N:=''''AMD K5''''
else AMDK5N:=GetExtendedCpuName;
end;
function TCpuData.Cyrix686N:string;
begin
if CpuData.GetMaxExtendedFunctions>0 then Cyrix686N:=GetExtendedCpuName
else
if CheckMMX then Cyrix686N:=''''VIA Cyrix 6x86MII''''
else
Cyrix686N:=''''VIA Cyrix 6x86'''';
end;
function TCpuData.GenericCpuN:string;
var SysInfo:TSystemInfo;
begin
GetSystemInfo(SysInfo);
if SysInfo.dwProcessorType=386
    then GenericCpuN:=''''Generic 386 CPU''''
else
if SysInfo.dwProcessorType=486
    then GenericCpuN:=''''Generic 486 CPU''''
else
if SysInfo.dwProcessorType=586
    then GenericCpuN:=''''Pentium Class CPU''''
else GenericCpuN:=''''Unknown CPU'''';
end;
function TCpuData.P5CacheL1DI:word;
begin
if CheckMMX then P5CacheL1DI:=16
else P5CacheL1DI:=8;
end;
function TCpuData.P6CacheL1DI:word;
begin
if not CheckMMX then P6CacheL1DI:=8
else P6CacheL1DI:=16;
end;
function TCpuData.P6CacheL2:word;
var Family,Model,Stepping:byte;
begin
if CheckCeleron then P6CacheL2:=128
else
if CheckPentiumIII then begin
                          GetFMS(Family,Model,Stepping);
                          if Model=7 then P6CacheL2:=512
                          else if Model=8 then P6cacheL2:=256
                          else P6CacheL2:=512;
                         end
else if not CheckMMX then P6CacheL2:=512
else P6CacheL2:=512;
end;
function TCpuData.AuthenticAMD:TCpuRec;
var Family,Model,Stepping:byte;
    EFamily,EModel,EStepping:byte;
begin
GetFMS(Family,Model,Stepping);
If Family=4 then begin
                   AuthenticAMD.Name:=''''AMD 486'''';
                   AuthenticAMD.Vendor:=GetVendorString;
          &nb

上一页  [1] [2] [3] [4] [5] [6] [7]  下一页

打印本文 打印本文 关闭窗口 关闭窗口