Руководство по языку B.Pascal 7

       

Ближние и дальние типы вызовов


В центральном процессоре 8086 поддерживается два типа вызо- вов и инструкций возврата управления - ближние (NEAR) и дальние (FAR). Ближние вызовы передают управление другой ячейке в преде- лах того же программного сегмента, а дальние вызовы позволяют пе- рейти в другой программный сегмент.

Инструкция ближнего обращения CALL помещает в стек 16-бито- вый адрес возврата (только смещение), а инструкция дальнего вызо- ва помещает в стек 32-битовый адрес возврата (адрес сегмента и смещение). Соответствующая инструкция RET извлекает из стека только смещение или адрес сегмента и смещение.

На основе описания процедуры в Borland Pascal будет автома- тически выбираться правильный тип обращения. Процедуры, описанные в интерфейсной секции модуля соответствуют дальнему обращению и могут вызываться из других блоков. Процедуры, описанные в прог- рамме в секции реализации модуля (implementation), являются ближ- ними и могут вызываться только из этой программы или данного мо- дуля.

Для некоторых конкретных целей можно потребовать, чтобы про- цедура имела дальний тип вызова. Например, процедура выхода, драйверы устройств для текстовых файлов и другие средства, ис- пользующие указатели на процедуры. Директива компилятора {$F+} указывает на необходимость использования дальнего типа вызовов. Процедуры или функции, скомпилированные с данной директивой, всегда будут иметь дальний тип вызова. При использовании в Borland Pascal директивы {$F-} правильная схема вызова будет вы- бираться автоматически. По умолчанию назначается режим {$F-}.



Содержание раздела