Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по МО.doc
Скачиваний:
47
Добавлен:
01.06.2015
Размер:
353.79 Кб
Скачать

Преобразование имен

Под термином «преобразование имен» понимаются правила формирования имен транслятором при создании объектного мо­дуля. Необходимо учитывать, по меньшей мере, следующие мо­менты:

  • допустимое количество символов в имени в программе на ЯП и в ОМ;

  • различаются ли прописные и строчные буквы в программе на ЯП и в ОМ;

  • не добавляет ли что-нибудь транслятор от себя к именам в ОМ.

Длина внешнего имени (т.е. имени «видимого» компоновщи­ком) зависит от конкретной СП, как правило, это 32 символа.

В языке C в именах различаются прописные и строчные буквы, в языке Pascal, напротив, не различаются. Как правило, трансля­торы с этих языков поступают соответствующим образом при формировании имен в ОМ. В частности, Pascal-трансляторы преобразуют строчные буквы в прописные.

С-трансляторы, как правило, включают символ подчеркивания в начало каждого имени в ОМ.

Передача и возврат управления и данных

При рассмотрении передачи и возврата управления и данных необходимо учитывать следующие моменты:

  • тип команд вызова и возврата;

  • способы передачи параметров – по ссылке, по значению, для передачи по ссылке – тип адресации, передача сложных типов данных – массивов и структур;

  • доступ к данным в подпрограмме;

  • при передаче параметров через стек, в каком порядке помещать параметры в стек и какая из программ ответственна за очистку стека;

  • как располагаются многомерные массивы в памяти;

  • выполняется ли выравнивание полей структур на границу слова, двойного слова и т.п.;

  • СП могут осуществлять обязательное преобразование данных некоторых типов при использовании их в качестве фактиче­ских параметров;

  • как представляются сложные типы данных: структуры, за­писи и объекты (C++), записи, записи с вариантами, множе­ства (Pascal).

Сохранение регистров

В СП для языков Pascal и C фирм MicroSoft и Borland для компьютеров типа IBM PC подпрограммы обязаны сохранять со­держимое регистров CS, DS, SS, SP, BP. В других СП требования могут отличаться.

2.4. Соглашение о связях языка 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-адреса, выделение необходимой памяти в подпрограмме и ко­пирование туда параметра.