Иллюстрированный самоучитель по Турбо Паскалю
Описание программы
Описание подпрограммы состоит из заголовка и тела подпрограммы.
Заголовок
Заголовок процедуры имеет вид:
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).