⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpu.pas

📁 理论考试程序,可以自由下载,学习,请多多指点,批评
💻 PAS
📖 第 1 页 / 共 3 页
字号:
  pop edx 
  pop ecx 
  pop ebx 
  pop eax 
  end; 
CheckPN:=(TempCheck=0); 
end; 
function TCpuData.CheckCMPXCHG8B:Boolean; 
label NoCMPXCHG8B; 
var TempCheck:dword; 
begin 
TempCheck:=1; 
asm 
  push eax 
  push ebx 
  push ecx 
  push edx 
  mov eax,1 
  db $0F,$A2               /// cpuid 
  test edx,$100 
  jz NoCMPXCHG8B 
  mov edx,0 
  mov TempCheck,edx 
NoCMPXCHG8B: 
  pop edx 
  pop ecx 
  pop ebx 
  pop eax 
  end; 
CheckCMPXCHG8B:=(TempCheck=0); 
end; 
function TCpuData.CheckCMOVe:Boolean; 
label NoCMOVe; 
var TempCheck:dword; 
begin 
TempCheck:=1; 
asm 
  push eax 
  push ebx 
  push ecx 
  push edx 
  mov eax,1 
  db $0F,$A2               /// cpuid 
  test edx,$8000 
  jz NoCMOVe 
  mov edx,0 
  mov TempCheck,edx 
NoCMOVe: 
  pop edx 
  pop ecx 
  pop ebx 
  pop eax 
  end; 
CheckCMOVe:=(TempCheck=0); 
end; 
function TCpuData.CheckSelfSnoop:Boolean; 
label NoSelfSnoop; 
var TempCheck:dword; 
begin 
TempCheck:=1; 
asm 
  push eax 
  push ebx 
  push ecx 
  push edx 
  mov eax,1 
  db $0F,$A2               /// cpuid 
  test edx,$8000000 
  jz NoSelfSnoop 
  mov edx,0 
  mov TempCheck,edx 
NoSelfSnoop: 
  pop edx 
  pop ecx 
  pop ebx 
  pop eax 
  end; 
CheckSelfSnoop:=(TempCheck=0); 
end; 
function TCpuData.CheckDebugTraceStore:Boolean; 
label NoDebugTraceStore; 
var TempCheck:dword; 
begin 
TempCheck:=1; 
asm 
  push eax 
  push ebx 
  push ecx 
  push edx 
  mov eax,1 
  db $0F,$A2               /// cpuid 
  test edx,$200000 
  jz NoDebugTraceStore 
  mov edx,0 
  mov TempCheck,edx 
NoDebugTraceStore: 
  pop edx 
  pop ecx 
  pop ebx 
  pop eax 
  end; 
CheckDebugTraceStore:=(TempCheck=0); 
end; 
function TCpuData.CheckFXSAVEFXRSTOR:Boolean; 
label NoFXSAVEFXRSTOR; 
var TempCheck:dword; 
begin 
TempCheck:=1; 
asm 
  push eax 
  push ebx 
  push ecx 
  push edx 
  mov eax,1 
  db $0F,$A2               /// cpuid 
  test edx,$1000000 
  jz NoFXSAVEFXRSTOR 
  mov edx,0 
  mov TempCheck,edx 
NoFXSAVEFXRSTOR: 
  pop edx 
  pop ecx 
  pop ebx 
  pop eax 
  end; 
CheckFXSAVEFXRSTOR:=(TempCheck=0); 
end; 
function TCpuData.CheckMMX:Boolean; 
label NoMMX; 
var TempCheck:dword; 
begin 
TempCheck:=1; 
asm 
  push eax 
  push ebx 
  push ecx 
  push edx 
  mov eax,1 
  db $0F,$A2               /// cpuid 
  test edx,$800000 
  jz NoMMX 
  mov edx,0 
  mov TempCheck,edx 
NoMMX: 
  pop edx 
  pop ecx 
  pop ebx 
  pop eax 
  end; 
CheckMMX:=(TempCheck=0); 
end; 
function TCpuData.CheckMMXplus:Boolean; 
label NoMMXplus; 
var TempCheck:dword; 
begin 
TempCheck:=1; 
asm 
  push eax 
  push ebx 
  push ecx 
  push edx 
  mov eax,$80000001 
  mov ebx,0 
  mov ecx,0 
  mov edx,0 
  db $0F,$A2               /// cpuid 
  test edx,$400000 
  jz NoMMXplus 
  mov edx,0 
  mov TempCheck,edx 
NoMMXplus: 
  pop edx 
  pop ecx 
  pop ebx 
  pop eax 
  end; 
CheckMMXplus:=(TempCheck=0); 
end; 
function TCpuData.CheckSSE:Boolean; 
label NoSSE; 
var TempCheck:dword; 
begin 
TempCheck:=1; 
asm 
  push eax 
  push ebx 
  push ecx 
  push edx 
  mov eax,1 
  db $0F,$A2               /// cpuid 
  test edx,$2000000 
  jz NoSSE 
  mov edx,0 
  mov TempCheck,edx 
NoSSE: 
  pop edx 
  pop ecx 
  pop ebx 
  pop eax 
  end; 
CheckSSE:=(TempCheck=0); 
end; 
function TCpuData.CheckSSE2:Boolean; 
label NoSSE2; 
var TempCheck:dword; 
begin 
TempCheck:=1; 
asm 
  push eax 
  push ebx 
  push ecx 
  push edx 
  mov eax,1 
  db $0F,$A2               /// cpuid 
  test edx,$4000000 
  jz NoSSE2 
  mov edx,0 
  mov TempCheck,edx 
NoSSE2: 
  pop edx 
  pop ecx 
  pop ebx 
  pop eax 
  end; 
CheckSSE2:=(TempCheck=0); 
end; 
function TCpuData.CheckAMD3DNow:Boolean; 
label NoAMD3DNow; 
var TempCheck:dword; 
begin 
TempCheck:=1; 
asm 
  push eax 
  push ebx 
  push ecx 
  push edx 
  mov eax,$80000001 
  mov ebx,0 
  mov ecx,0 
  mov edx,0 
  db $0F,$A2               /// cpuid 
  test edx,$80000000 
  jz NoAMD3DNow 
  mov edx,0 
  mov TempCheck,edx 
NoAMD3DNow: 
  pop edx 
  pop ecx 
  pop ebx 
  pop eax 
  end; 
CheckAMD3DNow:=(TempCheck=0); 
end; 
function TCpuData.CheckAMD3DNowPlus:Boolean; 
label NoAMD3DNowPlus; 
var TempCheck:dword; 
begin 
TempCheck:=1; 
asm 
  push eax 
  push ebx 
  push ecx 
  push edx 
  mov eax,$80000001 
  mov ebx,0 
  mov ecx,0 
  mov edx,0 
  db $0F,$A2               /// cpuid 
  test edx,$40000000 
  jz NoAMD3DNowPlus 
  mov edx,0 
  mov TempCheck,edx 
NoAMD3DNowPlus: 
  pop edx 
  pop ecx 
  pop ebx 
  pop eax 
  end; 
CheckAMD3DNowPlus:=(TempCheck=0); 
end; 
function TCpuData.GetMaxExtendedFunctions:dword; 
var TempExt:dword; 
begin 
asm 
  push eax 
  push ebx 
  push ecx 
  push edx 
  mov eax,$80000000 
  mov ebx,0 
  mov ecx,0 
  mov edx,0 
  db $0F,$A2               /// cpuid 
  shl eax,1 
  shr eax,1 
  mov TempExt,eax 
  pop edx 
  pop ecx 
  pop ebx 
  pop eax 
end; 
GetMaxExtendedFunctions:=TempExt; 
end; 

procedure TCpuData.GetExtendedFMS(var family,model,stepping:byte); 
var TempFlags:dword; 
    BinFlags:array[0..31] of byte; 
    i,pos:integer; 
begin 
asm 
  push eax 
  push ebx 
  push ecx 
  push edx 
  mov eax,$80000001 
  mov ebx,0 
  mov ecx,0 
  mov edx,0 
  db $0F,$A2               /// cpuid 
  mov TempFlags,eax 
  pop edx 
  pop ecx 
  pop ebx 
  pop eax 
end; 
for i:=0 to 31 do 
  begin 
   BinFlags[i]:=TempFlags mod 2; 
   TempFlags:=TempFlags div 2; 
  end; 
family:=0; 
model:=0; 
stepping:=0; 
  pos:=0; 
  for i:=0 to 3 do 
   begin 
    stepping:=stepping+(BinFlags[pos]*StrToInt(FloatToStr(Power(2,i)))); 
    inc(pos); 
   end; 
  pos:=4; 
  for i:=0 to 3 do 
   begin 
    model:=model+(BinFlags[pos]*StrToInt(FloatToStr(Power(2,i)))); 
    inc(pos); 
   end; 
  pos:=8; 
  for i:=0 to 3 do 
   begin 
    family:=family+(BinFlags[pos]*StrToInt(FloatToStr(Power(2,i)))); 
    inc(pos); 
   end; 
end; 

function TCpuData.GetExtendedCpuName:string; 
var s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12:array[0..3] of char; 
    TempCpuName:string; 
    i:integer; 
begin 
asm 
  push eax 
  push ebx 
  push ecx 
  push edx 
  mov eax,$80000002 
  mov ebx,0 
  mov ecx,0 
  mov edx,0 
  db $0F,$A2               /// cpuid 
  mov s1,eax 
  mov s2,ebx 
  mov s3,ecx 
  mov s4,edx 
  mov eax,$80000003 
  mov ebx,0 
  mov ecx,0 
  mov edx,0 
  db $0F,$A2               /// cpuid 
  mov s5,eax 
  mov s6,ebx 
  mov s7,ecx 
  mov s8,edx 
  mov eax,$80000004 
  mov ebx,0 
  mov ecx,0 
  mov edx,0 
  db $0F,$A2               /// cpuid 
  mov s9,eax 
  mov s10,ebx 
  mov s11,ecx 
  mov s12,edx 
  pop edx 
  pop ecx 
  pop ebx 
  pop eax 
end; 
  TempCpuName:=''; 
  for i:=0 to 3 do 
   TempCpuName:=TempCpuName+s1[i]; 
  for 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; 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -