12. UniPascal в деталях
79
Block =
[ Declarations ]
'begin'
   Statement { ';' Statement } [
'exit' ':' 
   Statement { ';' Statement } ]
'end'.
Выполнение стандартной процедуры RETURN или EXIT в теле блока, в котором
отсутствует метка EXIT, вызывает принудительное завершение работы блока, т.е.
управление передается концу блока.
Наличие метки EXIT в теле блока изменяет семантику стандартных процедур EXIT
и RETURN, если их использование находится после метки EXIT. Тогда они передают
управление не концу блока, а помеченному этой меткой оператору. Обращения к
процедурам RETURN и EXIT, находящимся за меткой EXIT в теле блока сохраняют их
обычный семантический смысл и передают управление концу блока. Фрагмент блока с
помеченного меткой EXIT оператора до конца блока выполняет завершительные
работы по окончанию выполнения блока.
Случай, когда метка EXIT находится в инициализационной части модуля, очень
близок к здесь описанному (см. п. 8.2). Пример применения метки EXIT в модулях
дается в модуле STACK, находящемся на дистрибутивном дискете.
12.5. Оверлейные процедуры
Оверлей (перекрытие) процедуры реализуется с точки зрения программиста на
языке UniPascal только прибавлением зарезервированного слова SEGMENT.
Использование оверлейных процедур наложительно, если память компьютера не
хватает на одновременное расположение в памяти всего кода программы и ее данных.
Оверлейные процедуры в UniPascal-е загружаются в память компьютера в
момент их активизации. Код процедуры остается в памяти, пока процедура не перейдет
в неактивное состояние. После окончания работы процедуры занятая ею память
освобождается (код процедуры в памяти уничтожается). При новой активизации, она
снова загружается в память. Чтобы загрузка оверлейной процедуры была возможна,
файл с кодом программой (или модуля) должен оставаться открытым.
Простаивание файла в открытом состоянии не обходится даром операционной
системе:
*
допустимое число N открытых одновременно программой файлов,
становится N-k, где k число файлов, содержащих код оверлейных процедур;
*
дискет, на котором находится открытый файл, нельзя вынимать из
дискетного устройства. (Если микрокомпьютер оснащен только одним
дискетным устройством, используйте возможность UniDOS-а обеспечивать
доступ к двум логическим устройствам на одном физическом.) Замена
дискета, содержащего открытые файлы, может привести к уничтожению
информации другого и/или информации обоих дискетов.
Необходимо особое внимание при связывании ассемблерских подпрограмм к
оверлейным процедурам. Опасность возникает при связывании подпрограмм, которые
записывают значения, необходимые им при повторном вызове. Код подпрограммы
можеть быть уничтожен в памяти (вместе с оверлейной процедурой на UniPascal-е) и
позже снова загружен в ней. Тогда сохраненные значения будут потеряны, т.е. они
будут в своем начальном состоянии, записанном ассемблером. Например, пусть
имеем ассемблерскую подпрограмму, которая заполняет некоторый буфер с целью
отпечатать его либо на экране, либо на печатающем устройстве или обработать его
<<  <  GO  >  >>

Вернуться к началу сайта