Вернуться к статье
Листинг 8. Определение времени выполненияа фрагмента кода
program TIME;
var
      Time : real;
      Mask : byte;
      Mode : byte;
begin
      TextColor (LightGray);
      TextBackGround (Black);
      Mode := Port [$61];              (* текущий  режим   работы *)
      Port [$61] := Mode or $04;   (* установка режима  Turbo *)
      Mask := Port [$21];              (* маска аппаратных прерываний *)
      Port [$21] := $FF;               (* запрет всех  прерываний *)
      Port [$43] := $36;               (* выбор канала 0 таймера: *)
      Port [$40] := $01;               (* младший  байт  делителя *)
      Port [$40] := $00;               (* старший  байт  делителя *)
      (*************************************)
      (*  Фрагмент программы  *)
      (*************************************)
      (* остановка счетчика и чтение результата *)
      Port [$43] := $00;
      Time := 65535.0 - (Port [$40] + Port [$40] * 256.0);
      Port [$43] := $36;               (* восстановление   канала *)
      Port [$40] := $00;               (* 0 таймера: делитель = 0 *)
      Port [$40] := $00;
      Port [$21] := Mask;              (* восстановление  прерываний *)
      Port [$61] := Mode;              (* восстановление исходного режима *)
      WriteLn ('Время прохода фрагмента кода = ', Time : 0 : 0);
      Halt (0)
end. (* TIME *)


Вернуться к статье
515