ВУЗ:
Составители:
Рубрика:
83
12. Процедура AssignCRT. Связывает текстовую файловую перемен-
ную F c экраном с помощью непосредственного обращения к видеопамяти (т.
е. к памяти, используемой адаптером для создания изображения на экране). В
результате вывод в такой текстовый файл осуществляется значительно (в
3…5 раз) быстрее, чем, если бы этот файл был связан с экраном стандартной
процедурой Assign. Заголовок процедуры:
Procedure AssignCRT (F: Text);
В
следующей программе измеряется скорость вывода на экран с помо-
щью стандартной файловой процедуры и с помощью непосредственного
обращения к видеопамяти. Вначале файловая переменная F связывается
“медленной” процедурой Assign со стандартным устройством CON (т.е. с эк-
раном) и подсчитывает количество N1 циклов вывода некоторого текста за
5*55 = 275 миллисекунд системных часов. Затем файловая переменная свя-
зывается
с экраном с помощью процедуры быстрого доступа AssignCRT и
точно так же подсчитывается количество N2 циклов вывода. В конце про-
граммы счетчики N1 и N2 выводятся на экран.
Показания системных часов хранятся в оперативной памяти компью-
тера в виде четырехбайтного слова по адресу [$0040:$006C] и наращиваются
на единицу каждые 55 миллисекунд.
Uses CRT;
Var
F: Text;
t:LongInt; {начало отсчета времени}
N1, N2: Word; {счетчики
вывода}
Const
txt =
′Text′;
begin
{---Стандартный вывод в файл---}
Assign (F,
′CON′);
Rewrite (F);
N1 := 0; {готовим счетчик вывода}
ClrScr; {очищаем экран}
t := MemL [$0040:$006C]; {запоминаем начальный момент}
{ждем начала нового 55-мс интервала, чтобы исключить погрешность в
определении времени:}
while MemL[$0040:$006C] = t do
{цикл вывода за пять интервалов}
while MemL[$0040:$006C] < t+6 do
begin
inc (N1);
84
Write (F, txt)
end;
Close (F);
{Вывод с помощью быстрой процедуры
прямого доступа к экрану}
AssignCRT (F);
Rewrite (F):
N2:=0;
ClrScr;
t := MemL [$0040:$006C];
while MemL[$0040:$006C] = t do
while MemL[$0040:$006C] < t+6 do
begin
inc (N2);
Write (F, txt)
end;
Close (F);
ClrScr;
WriteLn (N1, N2: 10) {Печатаем результат}
end.
Следует учесть, что вывод на экран обычным образом – без использо-
вания файловой переменной (например, оператором Write (txt)) также
осуществляется с помощью непосредственного доступа к видеопамяти, по-
этому ценность процедуры AssignCRT весьма сомнительна. Прямой доступ к
видеопамяти регулируется глобальной логической переменной DirectVideo
модуля CRT: если эта переменная имеет значение TRUE, доступ разрешен,
если FALSE – доступ к экрану осуществляется
с помощью относительно
медленных средств операционной системы MS-DOS. По умолчанию пере-
менная DirectVideo имеет значение TRUE.
Программирование звукового генератора
В модуль CRT включены три процедуры, с помощью которых можно
запрограммировать произвольную последовательность звуков.
1. Процедура Sound заставляет динамик звучать с нужной частотой.
Заголовок процедуры:
Procedure Sound (F:Word);
Здесь F – выражение типа Word, определяющее частоту звука в герцах.
После обращения к процедуре включается динамик, и управление немедлен-
12. Процедура AssignCRT. Связывает текстовую файловую перемен- Write (F, txt)
ную F c экраном с помощью непосредственного обращения к видеопамяти (т. end;
Close (F);
е. к памяти, используемой адаптером для создания изображения на экране). В
{Вывод с помощью быстрой процедуры
результате вывод в такой текстовый файл осуществляется значительно (в прямого доступа к экрану}
3 5 раз) быстрее, чем, если бы этот файл был связан с экраном стандартной AssignCRT (F);
процедурой Assign. Заголовок процедуры: Rewrite (F):
Procedure AssignCRT (F: Text); N2:=0;
ClrScr;
В следующей программе измеряется скорость вывода на экран с помо-
t := MemL [$0040:$006C];
щью стандартной файловой процедуры и с помощью непосредственного while MemL[$0040:$006C] = t do
обращения к видеопамяти. Вначале файловая переменная F связывается while MemL[$0040:$006C] < t+6 do
медленной процедурой Assign со стандартным устройством CON (т.е. с эк- begin
раном) и подсчитывает количество N1 циклов вывода некоторого текста за inc (N2);
Write (F, txt)
5*55 = 275 миллисекунд системных часов. Затем файловая переменная свя-
end;
зывается с экраном с помощью процедуры быстрого доступа AssignCRT и Close (F);
точно так же подсчитывается количество N2 циклов вывода. В конце про- ClrScr;
граммы счетчики N1 и N2 выводятся на экран. WriteLn (N1, N2: 10) {Печатаем результат}
Показания системных часов хранятся в оперативной памяти компью- end.
тера в виде четырехбайтного слова по адресу [$0040:$006C] и наращиваются
Следует учесть, что вывод на экран обычным образом без использо-
на единицу каждые 55 миллисекунд.
вания файловой переменной (например, оператором Write (txt)) также
Uses CRT;
Var осуществляется с помощью непосредственного доступа к видеопамяти, по-
F: Text; этому ценность процедуры AssignCRT весьма сомнительна. Прямой доступ к
t:LongInt; {начало отсчета времени} видеопамяти регулируется глобальной логической переменной DirectVideo
N1, N2: Word; {счетчики вывода} модуля CRT: если эта переменная имеет значение TRUE, доступ разрешен,
Const
если FALSE доступ к экрану осуществляется с помощью относительно
txt = ′Text′;
begin медленных средств операционной системы MS-DOS. По умолчанию пере-
{---Стандартный вывод в файл---} менная DirectVideo имеет значение TRUE.
Assign (F, ′CON′);
Rewrite (F); Программирование звукового генератора
N1 := 0; {готовим счетчик вывода}
ClrScr; {очищаем экран}
t := MemL [$0040:$006C]; {запоминаем начальный момент} В модуль CRT включены три процедуры, с помощью которых можно
{ждем начала нового 55-мс интервала, чтобы исключить погрешность в запрограммировать произвольную последовательность звуков.
определении времени:} 1. Процедура Sound заставляет динамик звучать с нужной частотой.
while MemL[$0040:$006C] = t do Заголовок процедуры:
{цикл вывода за пять интервалов}
Procedure Sound (F:Word);
while MemL[$0040:$006C] < t+6 do
begin Здесь F выражение типа Word, определяющее частоту звука в герцах.
inc (N1); После обращения к процедуре включается динамик, и управление немедлен-
83 84
Страницы
- « первая
- ‹ предыдущая
- …
- 40
- 41
- 42
- 43
- 44
- …
- следующая ›
- последняя »
