Сохранение регистров
В СП для языков Pascal и C фирм MicroSoft и Borland для компьютеров типа IBM PC подпрограммы обязаны сохранять содержимое регистров CS, DS, SS, SP, BP. В других СП требования могут отличаться.
Соглашение о связях языка Pascal (сводка)
Преобразование имен
Значащая длина идентификатора может быть от 8 до 250 символов, умолчание – 32. Для изменения служит команда Options+Compiler+Source.
Строчные буквы преобразуются в прописные.
Передача и возврат управления
Тип подпрограмм (near или far) и, следовательно, команд call и ret зависит от двух факторов:
· обращение к внешним подпрограммам всегда осуществляется как к far подпрограммам;
· если включен режим Force Far Calls (команда Options+Compiler), то и подпрограммы внутри единицы трансляции рассматриваются как far, в противном случае такие подпрограммы рассматриваются как near.
Передача и возврат данных
Параметры передаются в стеке. Помещаются в стек в порядке, соответствующем порядку записи в тексте подпрограммы, т.е. последний в тексте будет на самом верху стека.
По умолчанию параметры передаются по значению, при наличии модификатора var – по ссылке, при этом размер указателя – far.
Скалярные и структурные данные, помещающиеся в байт, возвращаются в AL, помещающиеся в слово – в AX, помещающиеся в двойное слово – в паре DX:AX. Табл. 4 поясняет соответствие типов возвращаемых данных языка Pascal и регистров процессора.
Таблица 4
Тип функции | Регистр(ы) |
Boolean, Char, ShortInt, Byte | AL |
Integer, Word | AX |
LongInt | DX – старшее слово, AX – младшее |
Pointer | DX – сегмент, AX – смещение |
String | · в вызывающей подпрограмме резервируется память под возвращаемую строку; · в стек на самый низ (т.е. первым параметром) помещается адрес этой памяти; · вызываемая подпрограмма помещает по указанному адресу результат; · при возврате стек чистится от всех параметров, кроме этого адреса, удалением этого адреса должна заниматься вызывающая подпрограмма. |
Многомерные массивы располагаются в памяти таким образом, что быстрее изменяется последний индекс.
При передаче по значению массива, записи или строки компилятор формирует код, который обеспечивает передачу через стек far-адреса, выделение необходимой памяти в подпрограмме и копирование туда параметра.