Turbo Assembler 3.0. Руководство пользователя

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


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

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

procedure AsmProc(a : integer; b : real); external;

function AsmFunc(c : word; d : byte); external;

Эти описания должны соответствовать следующим описаниям в программе Турбо Ассемблера:

CODE SEGMENT BYTE PUBLIC AsmProc PROC NEAR PUBLIC AsmProc . . . AsmProc ENDP AsmFunc PROC FAR PUBLIC Bar . . . AsmFunc ENDP CODE ENDS

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

Турбо Паскаль не делает проверку, чтобы убедиться, что все процедуры, описанные с атрибутами NEAR или FAR, соответствуют ближним или дальним подпрограммам в программе Турбо Паскаля. Фак- тически, он даже не проверяет, являются ли метки AsmProc и AsmFunc именами процедур. Поэтому вы должны обеспечить, чтобы описания в Ассемблере и Паскале были правильными.



Содержание раздела