Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
Если Вам необходимо не только "вычислить" частоту процессора, а и узнать о процессоре как можно больше, пожалуйста, пользуйтесь следующим модулем:
unitExpandCPUInfo; interface
type
TCPUInfo = packed
record
IDString : array
[0..11] of
Char; Stepping : Integer; Model : Integer; Family : Integer; FPU, VirtualModeExtensions, DebuggingExtensions, PageSizeExtensions, TimeStampCounter, K86ModelSpecificRegisters, MachineCheckException, CMPXCHG8B, APIC, MemoryTypeRangeRegisters, GlobalPagingExtension, ConditionalMoveInstruction, MMX : Boolean; SYSCALLandSYSRET, FPConditionalMoveInstruction, AMD3DNow : Boolean; CPUName : String
; end
; {информация об идентификации процессора} function
ExistCPUID:Boolean; function
CPUIDInfo(out
info: TCPUInfo):Boolean;
{инф-я о технологии процессора} functionExistMMX:Boolean; function
Exist3DNow:Boolean; function
ExistKNI:Boolean;
{------------------------} procedureEMMS; procedure
FEMMS; procedure
PREFETCH(p: Pointer); register
; implementation
function
ExistCPUID : Boolean; asm
pushfd pop eax mov ebx, eax xor
eax, 00200000h push eax popfd pushfd pop ecx mov eax,0 cmp ecx, ebx jz @NO_CPUID inc eax @NO_CPUID: end
; function
CPUIDInfo(out
info: TCPUIDInfo):Boolean; function
ExistExtendedCPUIDFunctions:Boolean; asm
mov eax,080000000h db $0F,$A2 end
; var
name : array
[0..47] of
Char; p : Pointer; begin
if
ExistCPUID then
asm
jmp @Start @BitLoop: mov al,dl and
al,1 mov [edi],al shr
edx,1 inc edi loop @BitLoop ret @Start: mov edi,info mov eax,0 db $0F,$A2 mov [edi],ebx mov [edi+4],edx mov [edi+8],ecx mov eax,1 db $0F,$A2 mov ebx,eax and
eax,0fh; mov [edi+12],eax; shr
ebx,4 mov eax,ebx and
eax,0fh mov [edi+12+4],eax shr
ebx,4 mov eax,ebx and
eax,0fh mov [edi+12+8],eax add edi,24 mov ecx,6 call @BitLoop shr
edx,1 mov ecx,3 call @BitLoop shr
edx,2 mov ecx,2 call @BitLoop shr
edx,1 mov ecx,1 call @BitLoop shr
edx,7 mov ecx,1 call @BitLoop mov p,edi end
; if
(info.IDString = 'AuthenticAMD') and
ExistExtendedCPUIDFunctions then
begin
asm
mov edi,p mov eax,080000001h db $0F,$A2 mov eax,edx shr
eax,11 and
al,1 mov [edi],al mov eax,edx shr
eax,16 and
al,1 mov [edi+1],al mov eax,edx shr
eax,31 and
al,1 mov [edi+2],al lea edi,name mov eax,0 mov [edi],eax mov eax,080000000h db $0F,$A2 cmp eax,080000004h jl @NoString mov eax,080000002h db $0F,$A2 mov [edi],eax mov [edi+4],ebx mov [edi+8],ecx mov [edi+12],edx add edi,16 mov eax,080000003h db $0F,$A2 mov [edi],eax mov [edi+4],ebx mov [edi+8],ecx mov [edi+12],edx add edi,16 mov eax,080000004h db $0F,$A2 mov [edi],eax mov [edi+4],ebx mov [edi+8],ecx mov [edi+12],edx @NoString: end
; info.CPUName:=name; end
else
with
info do
begin
SYSCALLandSYSRET:=False
; FPConditionalMoveInstruction:=False
; AMD3DNow:=False
; CPUName:=''; end
; Result:=ExistCPUID; end
; function
ExistMMX:Boolean; var
info : TCPUIDInfo; begin
if
CPUIDInfo(info) then
Result:=info.MMX else
Result:=False
; end
; function
Exist3DNow:Boolean; var
info : TCPUIDInfo; begin
if
CPUIDInfo(info) then
Result:=info.AMD3DNow else
Result:=False
; end
; function
ExistKNI:Boolean; begin
Result:=False
; end
; procedure
EMMS; asm
db $0F,$77 end
; procedure
FEMMS; asm
db $0F,$03 end
; procedure
PREFETCH(p: Pointer); register
; asm
// PREFETCH byte ptr [eax] end
; end
.