Трансляция и компоновка

Для подключения внешней ассемблерной подпрограммы к про­грамме на Pascal следует:

оттранслировать ассемблерную программу и получить ОМ;

в программе на Pascal описать внешнюю подпрограмму
procedure имя(параметры); external;

в программу на Pascal с помощью команды {$L имяОМ } вклю­чить ОМ.

Соглашение о связях языка C (сводка)

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

Значащая длина идентификатора может быть от 8 до 250 символов, умолчание – 32. Для изменения служит команда Options+Compiler+Source.

Прописные и строчные буквы различаются.

В начало каждого имени включается символ подчеркивания, отменить это можно с помощью команды Options+Compiler+Advanced code generation.

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

Тип подпрограмм (near или far) и, следовательно, команд call и ret зависит от используемой модели памяти. Установка модели памяти осуществляется командой Options+Compiler+Code generation. Подробнее о моделях памяти см. лабораторную работу «Использование подпрограмм» настоящего сборника или докумен­тацию по СП.

Передача и возврат данных

Параметры передаются в стеке. Помещаются они в стек в по­рядке, обратном порядку записи в тексте программы, т.е. первый в тексте будет на самом верху стека.

Скалярные типы данных передаются по значению, массивы – по ссылке. Размер указателя (near или far) зависит от используе­мой модели памяти.

Скалярные и структурные данные, помещающиеся в байт, воз­вращаются в AL, помещающиеся в слово – в AX, помещающиеся в двойное слово – в паре DX:AX. Табл. 5 поясняет соответствие типов возвращаемых данных языка C и регистров процессора.

Таблица 5

Тип функции Регистр(ы)
char AL
short, int AX
long DX – старшее слово, AX – младшее
near * AX – смещение
far * DX – сегмент, AX – смещение

Многомерные массивы располагаются в памяти таким образом, что быстрее изменяется последний индекс.

При определении размеров структур и доступа к ним необхо­димо учитывать возможность выравнивания полей структур на границу слова (команда Options+Compiler+Advanced code generation).

Преобразование данных

При вызове подпрограммы скалярные данные типа float всегда преобразовываются в данные типа double. Поля типа float в струк­туре преобразованию не подвергаются.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: