Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BorlandPascal.doc
Скачиваний:
54
Добавлен:
17.03.2015
Размер:
2.83 Mб
Скачать

Результаты функций

Результаты функций порядкового типа возвращаются в регистрах

центрального процессора: байты возвращаются в регистре AL, слова

- в регистре AХ, двойные слова - в DX:AX (старшее слово - в DХ,

младшее - в AХ).

Результаты функций вещественного типа (значения вещественно-

го типа Real) возвращаются в регистрах DХ:ВХ:AX (старшее слово -

в регистре DХ, среднее слово - в регистре ВХ, младшее слово - в

AX).

Результаты функции, имеющие один из типов, использующихся в

процессоре 8087, (значения с одинарной, двойной или повышенной

точностью или сложного типа - Single, Double, Extended и Comp),

возвращаются в регистре вершины стека сопроцессора 8087 (SТ(0)).

Результаты функции типа указатель возвращаются в регистре DХ:

AX (адрес сегмента - в DХ, а смещение - в AX).

Что касается результата функции строкового типа, то вызываю-

щая программа помещает в стек перед передачей каких-либо парамет-

ров временную ячейку памяти, а функция возвращает строковое зна-

чение в этой временной ячейке. Функция не должна удалять указа-

тель.

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

В центральном процессоре 8086 поддерживается два типа вызо-

вов и инструкций возврата управления - ближние (NEAR) и дальние

(FAR). Ближние вызовы передают управление другой ячейке в преде-

лах того же программного сегмента, а дальние вызовы позволяют пе-

рейти в другой программный сегмент.

Инструкция ближнего обращения CALL помещает в стек 16-бито-

вый адрес возврата (только смещение), а инструкция дальнего вызо-

ва помещает в стек 32-битовый адрес возврата (адрес сегмента и

смещение). Соответствующая инструкция RET извлекает из стека

только смещение или адрес сегмента и смещение.

На основе описания процедуры в Borland Pascal будет автома-

тически выбираться правильный тип обращения. Процедуры, описанные

в интерфейсной секции модуля соответствуют дальнему обращению и

могут вызываться из других блоков. Процедуры, описанные в прог-

рамме в секции реализации модуля (implementation), являются ближ-

ними и могут вызываться только из этой программы или данного мо-

дуля.

Для некоторых конкретных целей можно потребовать, чтобы про-

цедура имела дальний тип вызова. Например, процедура выхода,

драйверы устройств для текстовых файлов и другие средства, ис-

пользующие указатели на процедуры. Директива компилятора {$F+}

указывает на необходимость использования дальнего типа вызовов.

Процедуры или функции, скомпилированные с данной директивой,

всегда будут иметь дальний тип вызова. При использовании в

Borland Pascal директивы {$F-} правильная схема вызова будет вы-

бираться автоматически. По умолчанию назначается режим {$F-}.

Соседние файлы в предмете Программирование на Pascal