Ближние и дальние типы вызовов
В центральном процессоре 8086 поддерживается два типа вызо- вов и инструкций возврата управления - ближние (NEAR) и дальние (FAR). Ближние вызовы передают управление другой ячейке в преде- лах того же программного сегмента, а дальние вызовы позволяют пе- рейти в другой программный сегмент.
Инструкция ближнего обращения CALL помещает в стек 16-бито- вый адрес возврата (только смещение), а инструкция дальнего вызо- ва помещает в стек 32-битовый адрес возврата (адрес сегмента и смещение). Соответствующая инструкция RET извлекает из стека только смещение или адрес сегмента и смещение.
На основе описания процедуры в Borland Pascal будет автома- тически выбираться правильный тип обращения. Процедуры, описанные в интерфейсной секции модуля соответствуют дальнему обращению и могут вызываться из других блоков. Процедуры, описанные в прог- рамме в секции реализации модуля (implementation), являются ближ- ними и могут вызываться только из этой программы или данного мо- дуля.
Для некоторых конкретных целей можно потребовать, чтобы про- цедура имела дальний тип вызова. Например, процедура выхода, драйверы устройств для текстовых файлов и другие средства, ис- пользующие указатели на процедуры. Директива компилятора {$F+} указывает на необходимость использования дальнего типа вызовов. Процедуры или функции, скомпилированные с данной директивой, всегда будут иметь дальний тип вызова. При использовании в Borland Pascal директивы {$F-} правильная схема вызова будет вы- бираться автоматически. По умолчанию назначается режим {$F-}.