|
Описание программы
Описание подпрограммы
состоит из заголовка и тела подпрограммы.
Заголовок
Заголовок процедуры имеет
вид:
PROCEDURE <имя> [ (<сп. ф.
п . >) ] ;
Заголовок функции:
FUNCTION <имя> [ (<сп.ф.п.>)]
: <тил>;
Здесь <имя> - имя подпрограммы
(правильный идентификатор);
<сп.ф.п.> - список формальных
параметров;
<тип> - тип возвращаемого функцией
результата.
Сразу за заголовком подпрограммы может
следовать одна из стандартных директив ASSEMBLER, EXTERNAL,
FAR, FORWARD, INLINE, INTERRUPT, NEAR. Эти директивы
уточняют действия компилятора и распространяются на
всю подпрограмму и только на нее, т.е. если за подпрограммой
следует другая подпрограмма, стандартная директива,
указанная за заголовком первой, не распространяется
на вторую.
ASSEMBLER - эта директива отменяет стандартную
последовательность машинных инструкций, вырабатываемых
при входе в процедуру и перед выходом из нее. Тело подпрограммы
в этом случае должно реализоваться с помощью команд
встроенного ассемблера (см. п.11.8).
EXTERNAL - с помощью этой директивы
объявляется внешняя подпрограмма (см. п.11.1).
FAR - компилятор должен создавать код
подпрограммы, рассчитанный на дальнюю модель вызова.
Директива NEAR заставит компилятор создать код, рассчитанный
на ближнюю модель памяти. По умолчанию все подпрограммы,
объявленные в интерфейсной части модулей, генерируются
с расчетом на дальнюю модель вызова, а все остальные
подпрограммы - на ближнюю модель.
В соответствии с архитектурой микропроцессора
ПК, в программах могут использоваться две модели памяти:
ближняя и дальняя. Модель памяти определяет возможность
вызова процедуры из различных частей программы: если
используется ближняя
модель, вызов возможен только в пределах
64 Кбайт (в пределах одного сегмента кода, который выделяется
основной программе и каждому используемому в ней модулю);
при дальней модели вызов возможен из любого сегмента.
Ближняя модель экономит один байт и несколько микросекунд
на каждом вызове подпрограммы, поэтому стандартный режим
компиляции предполагает эту модель памяти. Однако при
передаче процедурных параметров (см.п.8.4), а также
в оверлейных модулях (см. п. 11.6) соответствующие подпрограммы
должны компилироваться с расчетом на универсальную -
дальнюю - модель памяти, одинаково пригодную при любом
расположении процедуры и вызывающей ее программы в памяти.
Явное объявление модели памяти стандартными
директивами имеет более высокий приоритет по сравнению
с опциями настройки среды Турбо Паскаля.
FORWARD - используется при опережающем
описании (см. п.8.6) для сообщения компилятору, что
описание подпрограммы следует где-то дальше по тексту
программы (но в пределах текущего программного модуля).
INLINE - указывает на то, что тело подпрограммы
реализуется с помощью встроенных машинных инструкций
(см. п.11.2).
INTERRUPT - используется при создании
процедур обработки прерываний (см. п.11.4).
|