Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по япмт.docx
Скачиваний:
4
Добавлен:
18.09.2019
Размер:
3.94 Mб
Скачать

6!. Программный интерфейс между процедурами на языке Ассемблера и программой на языке Pascal.

Совместное с Турбо Паскалем использование данных

Директива компилятора $L и внешние подпрограммы

Два ключевых момента при использовании Турбо Ассемблера с Турбо Паскалем - это директива компилятора (Турбо Паскаля) {$L} и описание внешней (external) подпрограммы. Директива {$L MYFILE.OBJ} приводит к тому, что Турбо Паскаль будет искать файл объектный MYFILE.OBJ (файл в стандартном пригодном для компоновки формате MS-DOS) и компоновать его с вашей программой Турбо Паскаля. Если у файла в директиве {$L} расширение не указывается, то подразумевается расширение .OBJ.

Каждая процедура или функция Турбо Ассемблера, которую вы хотите сделать доступной в программе Турбо Паскаля, должна объявляться, как идентификатор PUBLIC, и ей должно соответствовать в программе описание external (внешняя).

Описание внешней (external) процедуры Турбо Паскаля должно находиться на самом внешнем уровне программы или модуля, то есть оно не должно быть вложенным по отношению к другому описанию процедуры или функции.

Директива PUBLIC

В Турбо Паскале доступны только те метки Ассемблера, которые объявлены в модуле на языке Ассемблера, как общедоступные (PUBLIC). Метки представляют собой единственные объекты, которые могут передаваться из языка Ассемблера в Турбо Паскаль. Более того, каждой общедоступной метке должно соответствовать описание

процедуры или функции в программе Турбо Паскаля.

Директива EXTRN

Модуль Турбо Ассемблера может обращаться к любой процедуре, функции, переменной или типизованной константе Турбо Паскаля, которая описывается на самом внешнем уровне программы или модуля, с которым она компонуется. (Заметим, что это включает в себя переменные, описанные после директивы компилятора {$L} и внешние описания, связанные с данным модулем.) Метки и обычные константы Турбо Паскаля языку Ассемблера недоступны.

Использование корректировок сегментов

Турбо Паскаль генерирует файлы .EXE, которые могут загружаться в память компьютера по любому доступному адресу. Поскольку в программе заранее неизвестно, куда будет загружен данный сегмент программы, компоновщик указывает загрузчику DOS.EXE, что нужно при загрузке скорректировать в программе все ссылки на сегменты. После выполнения этих корректировок все ссылки на сегменты (такие, как CODE или DATA) будут содержать корректные значения. Программа на Турбо Ассемблере может использовать это средство для получения адресов объектов во время выполнения.

Соглашения Турбо Паскаля по передаче параметров

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

Параметры-значения- это параметр, значение которого не может изменяться подпрограммой, в которую он передается.

Скалярные типы

Параметры-значения всех скалярных типов (boolean, char, shortint, byte, integer, word, longint, отрезки типов и перечислимые типы) передаются как значения через стек процессора. В соответствии со стандартом процессоров серии 8088 наиболее значащее (старшее) слово заносится в стек первым и занимает в стеке старшие адреса.

Вещественные значения

Параметры-значения вещественного типа (real) передаются, как 6 байт в стеке (в Турбо Паскале это тип представляет собой 6-байтовый программно-эмулируемый тип с плавающей точкой). Это единственный тип, превышающий 4 байта, который может передаваться через стек.

Указатели

Значения параметров для всех типов указателей заносятся непосредственно в стек, как указатели дальнего типа: сначала слово, содержащее сегмент, затем другое слово, содержащее смещение.

Строки

Строковые параметры, независимо от размера, обычно никогда не заносятся в стек. Вместо этого Турбо Паскаль заносит в стек указатель (дальнего типа) на строку. Вызываемая подпрограмма не должна изменять строку, на которую ссылается указатель. Если это необходимо, подпрограмма может создать и работать с копией строки.

Доступ к параметрам

Когда получает управление ваша подпрограмма на Турбо Ассемблере, вершина стека будет содержать адрес возврата (два или четыре слова, в зависимости от того, является ли подпрограмма ближней или дальней), а далее будут находится передаваемые параметры.

Существует три основных метода доступа к параметрам, передаваемых Турбо Паскалем вашей подпрограмме на Турбо Ассемблере. Вы можете:

- использовать для адресации к стеку регистр BP;

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

- извлечь из стека адрес возврата, а затем параметры.

Турбо Паскаль и директива .MODEL Директива .MODEL с параметром TPASCAL задает упрощенную сегментацию, модель памяти и языковую поддержку. Обычно используется большая модель памяти (large).