Турбо Ассемблер (TASM) значительно облегчает разработку
программ на языке ассемблера и организации в них интерфейса с
программами Borland Pascal. Турбо Ассемблер поддерживает специфи-
ческое использование сегментов, схему памяти и языковую поддержку
для программистов, работающих на Borland Pascal.
Используя ключевое слово PASCAL и директиву .MODEL, можно
обеспечить соблюдение соглашений о вызовах с Borland Pascal, оп-
ределить имена сегментов, выполнить инструкции PUSH BP и MOV
PB,SP, а также обеспечить возврат управления с помощью операторов
POP BP и RET N (где N - это число байт параметра). Директива
.MODEL имеет следующий синтаксис:
.MODEL xxxx, PASCAL
где xxxx - это модель памяти (обычно LARGE).
Задание в директиве .MODEL языка PASCAL сообщает Турбо
Ассемблеру, что параметры были занесены в стек слева-направо - в
том порядке, в котором они обнаружены в исходном операторе, вызы-
вающем процедуру.
B.Pascal 7 & Objects/LR - 439 -
Директива PROC позволяет вам задать параметры в том же по-
рядке, как они определены в программе Borland Pascal. Если вы оп-
ределяете функцию, которая возвращает строку, обратите внимание
на то, что директива PROC имеет опцию RETURNS, позволяющую вам
получить доступ к временному указателю строки в стеке и не оказы-
вающую влияния на число байт параметра, добавляемых в операторе
RET.
Приведем примеры кода, в которых используются директивы
.MODEL и PROC:
.MODEL LARGE, PASCAL
.CODE
MyProc PROC FAR 1:BYTE, j : BYTE RETURNS result : DWORD
PUBLIC MyProc
les di,result ; получить адрес временной строки
mov al,i ; получить первый параметр i
mov bl,j ; получить второй параметр j
.
.
.
ret
Определение функции в Borland Pascal будет выглядеть следую-
щим образом:
function MyProc(i,j : char) : string; external;