Вообще говоря, для каждого транслятора с языка высокого уровня существует свое собственное соглашение о связях между подпрограммами. То есть соглашение о том, в какие машинные команды и конструкции языка ассемблера транслируются операторы языка высокого уровня, служащие для описания и вызова подпрограмм.
Понятие «соглашение о связях» включает следующие аспекты: преобразование имен подпрограмм и переменных, передача и возврат управления, передача и возврат данных, преобразование данных при передаче и возврате, трансляция и компоновка подпрограмм в единую программу.
Преобразование имен
Под термином «преобразование имен» понимаются правила формирования имен транслятором при создании объектного модуля. Необходимо учитывать, по меньшей мере, следующие моменты:
· допустимое количество символов в имени в программе на ЯП и в ОМ;
· различаются ли прописные и строчные буквы в программе на ЯП и в ОМ;
· не добавляет ли что-нибудь транслятор от себя к именам в ОМ.
|
|
Длина внешнего имени (т.е. имени «видимого» компоновщиком) зависит от конкретной СП, как правило, это 32 символа.
В языке C в именах различаются прописные и строчные буквы, в языке Pascal, напротив, не различаются. Как правило, трансляторы с этих языков поступают соответствующим образом при формировании имен в ОМ. В частности, Pascal-трансляторы преобразуют строчные буквы в прописные.
С-трансляторы, как правило, включают символ подчеркивания в начало каждого имени в ОМ.
Передача и возврат управления и данных
При рассмотрении передачи и возврата управления и данных необходимо учитывать следующие моменты:
· тип команд вызова и возврата;
· способы передачи параметров – по ссылке, по значению, для передачи по ссылке – тип адресации, передача сложных типов данных – массивов и структур;
· доступ к данным в подпрограмме;
· при передаче параметров через стек, в каком порядке помещать параметры в стек и какая из программ ответственна за очистку стека;
· как располагаются многомерные массивы в памяти;
· выполняется ли выравнивание полей структур на границу слова, двойного слова и т.п.;
· СП могут осуществлять обязательное преобразование данных некоторых типов при использовании их в качестве фактических параметров;
· как представляются сложные типы данных: структуры, записи и объекты (C++), записи, записи с вариантами, множества (Pascal).