Теги
Друзья
Друзья
Home Документация Внешние процедуры Turbo Pascal


При помощи внешних процедур можно вызвать из программы процедуры или функции, написанные на языке ассемблера. Ассемблер осуществляет компиляцию всех программ, сделанных на машинном языке программирования низкого профиля. (Турбо Паскаль обладает собственным встроенным ассемблером). В данной статье речь пойдёт о программах, сделанных и откомпилированных при помощи ассемблера внешних процедур, такого как, например, ассемблер компании Borland или Microsoft.

Машинный язык ассемблера даёт квалифицированному программисту огромные возможности использования всех достопримечательностей архитектуры PC. Ассемблерные программы компилируются гораздо быстрее и имеют маленький объем памяти, чем профессиональные программы, которые написаны Турбо Паскалем, однако низкий профиль языка ассемблера очень сильно снижает производительность работы программиста и слишком сильно усложняет отладку всех программ. На языке программирования ассемблере, делаются сравнительно маленькие детали программ, в которых применяются недоступные из Турбо Паскаля достопримечательности архитектуры PC.

Внешняя процедура в данной программе, которая написана на Турбо Паскале, показывается своим заголовком, за которым можно увидеть директиву EXTERNAL.

Следует сказать, что там нет тела внешней процедуры - её подменяет директива EXTERNAL. При подключении ассемблерной программы нужно перед этим ее откомпилировать и получить специальный файл , который имеет расширение OBJ, а также, в котором содержится специальный код ассемблерной программы. Естественно, что перед тем как вписывать внешнюю процедуру  в тело данной программы для начала вставляется специальная директива {$L}, где - а конкретно говоря имя OBJ-file. Каталог и диск, в котором нужно искать данный файл, если он не показан в данном каталоге, указываются специальной опцией.

Перед отправкой управления внешней функции,  данная программа устанавливает параметры обращения в программный стек в естественном порядке, как они показаны в заголовке функции. Ассемблерная операция обязуется сохранить регистры SP, BP, DS и SS главного процессора в начале своей работы и вернуть состав этих регистров перед возвращением управления в  заданную программу.  Другие  регистры не сохраняются и, конечно же, не восстанавливаются.

Параметры отправляются по специальной ссылке, которая имеет своё назначение. Если параметр отправляется  преимущественно по ссылке, в стек дают указатель, который содержит в себе абсолютный адрес  заданного параметра, если данная операция выполняется по значению - в стек даётся сам параметр, а точнее – его заданное значение. Абсолютно все параметры, которые являются переменными, т.е. параметры, которые объявлены в соответствующем заголовке с предыдущим словом VAR, всегда отправляются по специальной ссылке. Параметры, которые являются значением, могут отправляться по специальной ссылке или по заданному значению всё зависит от длины представления внутреннего параметра.

Грубо говоря, используется данное правило: если длина внутреннего параметра конкретного значения составляет 2, 4 или 1 байт, он отправляется своим значением, т.е. его значение доставляется в стек. Также через стек отправляются и все большие объёмы длиной почти в 10 байт. В других ситуациях, если длина внутреннего параметра больше 10 байт, заданный параметр отправляется по ссылке.