Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ПТСПЦУВСБ / 8.Связь ASSEMBLER и PASCAL

.docx
Скачиваний:
50
Добавлен:
27.12.2015
Размер:
29.14 Кб
Скачать

Существует соглашения для связи ассемблера с каждым из языков. Здесь есть свои особенности.

  1. Способ передачи управления (тип вызова). В Pascal, если ассемблеровская процедура описана в основной программе или в implementation, то она вызывается как NEAR; при описании в interface- вызов FAR.

  2. Сегментация и модели памяти. Если выбрана модель .LARGE, то стек надо описывать как .FARSTACK и он уже не будет относиться к группе DGROUP.

  3. Особенности описания общих и предопределенных переменных. В Pascal ограничений нет, но рекомендуется начинать переменные с заглавной буквы; в С- переменные необходимо начинать с символа подчеркивания “_”

  4. Управление регистрами. DS – нужно следить за ним. РОН нужно сохранять или в головной программе или в процедуре на ассемблере.

  5. Способы передачи параметров. Как правило параметры передаются через кадр стек, размещение параметров идет в различном порядке.

  6. Способ возвращения результата. Возвращение результатов может быть реализована через стек, AX (BYTE, WORD), DX:AX (DWORD), ST(0)- вершина стека x87 (FLOAT).

  7. Способ восстановления стека. Pascal – в вызываемой программе, в С – в вызывающей программе (для возможности оптимизации)

  8. Способы задания и вызова ассемблерного модуля.

а) Раздельная компиляция. Модули на различных языках компилируются отдельно и в вызывающем модуле указан специальный оператор описания модуля на другом языке и его загрузки в виде объекта файла.

б) Встроенная компиляция. Фрагмент или команда ассемблера указывается как встроенный оператор и сам компилятор вызывает ассемблерные транслятор автоматически.

Связь ASSEMBLER и PASCAL.

Пример1:

Test(i, j, k)- вычисляет f=i+j-k; i, j, kZ.

i EQU WORD PTR [bp+8]

j EQU WORD PTR [bp+6]

k EQU WORD PTR [bp+4]

.Model Small

.Code

Public Test

Test Proc

Push bp

mov bp, sp

mov ax, i

add ax, j

sub ax, k

pop bp

ret 6

Test EndP

END

Function Test(i,j,k):Word;

External;

{$L Test.obj}

*******************

F:=Test(i,j,k);