опубликован 16-10-2001 22:46 MSK
Тока не ругайтесь...
На Паскале (определение частоты). Работает от 1/18.2 до 2/18.2 секунды...{$G+}
Uses Dos;
Var
TSC: Boolean;
Speed: Longint;
SaveInt8: Pointer;
Stage: Byte;
Procedure SpeedCounter; far; assembler;
Asm
push ax
push ds
mov ax,seg @Data
mov ds,ax
inc Stage
mov al,20h
out 20h,al
pop ds
pop ax
iret
End;
Begin
Asm
db 66h; xor ax,ax
inc ax
db 0Fh,0A2h
and dl,10h
mov TSC,dl
End;
If not TSC then
Begin
WriteLn('Your processor have no TSC.');
WriteLn('Do you wanna try anyway (Y/N) ?');
Asm
mov ah,0
int 16h
or al,20h
mov TSC,0
cmp al,'y'
jne @No
inc TSC
@No:
End;
If not TSC then Halt;
WriteLn
End;
Asm
mov ah,0Dh
int 21h
mov ax,1681h
int 2Fh
in al,0A1h
mov ah,al
in al,21h
push ax
mov al,0FEh
out 21h,al
inc ax
out 0A1h,al
End;
GetIntVec(8, SaveInt8);
SetIntVec(8, @SpeedCounter);
Asm
@1:cmp Stage,1
jne @1
db 0Fh,31h
db 66h; xchg bx,ax
@2:cmp Stage,2
jne @2
db 0Fh,31h
db 66h; sub ax,bx
db 66h; mov word ptr Speed,ax
pop ax
out 21h,al
mov al,ah
out 0A1h,al
End;
SetIntVec(8, SaveInt8);
Asm
mov ax,1682h
int 2Fh
End;
WriteLn('CPU Clock : ', Speed*(1193181/65536): 0: 0, ' Hz')
End.