Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
43
Добавлен:
15.04.2015
Размер:
1.15 Mб
Скачать
  1. Где можно разместить макроопределение?

  1. В тексте модуля, но до объявления сегментов.

  2. В отдельном файле, который создает программист. Этот файл должен быть вставлен транслятором с помощью директивы INCLUDE <имя>.

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

Пример программы, использующей макрокоманды

promt macro mes

lea dx, mes

mov ah, 09h

int 21h

endm

stack segment para stack 'stack'

dw 32 dup(?)

stack ends

data segment para 'data'

mes1 db 'test of macro', '$'

mes2 db 'assembler', '$'

data ends

cseg segment para 'code'

begin proc far

promt mes1 ; вывод первого сообщения

promt mes2 ; вывод второго сообщения

ret

begin endp

cseg ends

end begin

  1. СвязьAssemblerс языками высокого уровня

Для взаимодействия программы на языке Assembler с программой на Паскале можно использовать:

  1. Операторы типа inline

  2. Ассемблерные вставки

  3. Внешние процедуры

Операторы типа inline

Пример:

const

n=7;

massiv: array[1..n] of integer = (1,2,3,2,17,7,2);

function max(var mas, n:integer):integer;

inline ($59/ $5E/ … $8B/$C3); набор машинных команд

begin

writeln('Максимум', max(massiv,N) );

readln;

end.

Ассемблерные вставки

Пример:

asm

mov ah,0

int 16h

end;

Встроенный Assembler обладает ограниченными возможностями.

  1. Требования к программе на языкеAssembler

  • Написать процедуру ближнего или дальнего типа.

  • Объявить эту процедуру с помощью директивы public.

  • Произвести компиляцию для получения объектного файла:

TASM/zi имя

  1. Требования к программе на языкеPascal

  1. Нужно объявить вызываемую процедуру как внешнюю

Procedure <имя> [пар]; external;

  1. Необходимо указать путь к файлу, в котором содержится модуль программы на ассемблере: {$L <путь>}.

  2. Чтобы программа могла работать под отладчиком, ввести в программу директиву {$D+}

Пример:

Program mxpas;

{$D+}

uses crt;

procedure asmproc (ch:char; x, y, kol:integer); external;

{$L <файл на ассемблере>}

begin

clrscr;

asmproc ('a',1,2,3);

end.

  1. Передача параметров изPascal-программы в программу на ассемблере

При обращении к внешней процедуре на ассемблере фактические параметры записываются в стек в той последовательности, в какой они указаны в операторе. Программа на Assembler должна взять параметры, учитывая следующие соглашения:

  • Сохранить содержимое регистра BP в стеке.

  • Записать в регистр BP адрес вершины стека

  • Все обращения к стеку следует выполнять, используя базовый регистр BP

  • При возврате управления в программу на Pascal программа на Assembler должна выполнить очищение стека, а именно: восстановить содержимое регистра BP, удалить из стека переданные процедуре аргументы.

BP

CS

IP

PAR4

PAR3

PAR2

PAR1

[BP+12] – чтение PAR1

  1. Использование директивыmodelдля организации взаимодействия программ

При использовании директивы программа на Assembler может использовать имена переменных, объявленных в Pascal-программе.

Пример программы на Assembler с директивой model:

masm

model large pascal

.stack 256

.code

main:

asmproc proc near chr:byte, x:word, y:word, kol:word

public asmproc

mov dh, byte ptr y

mov dl, byte ptr x

mov ah, 02h

int 10h ; позиционирование курсора в нужное место

mov ah, 09h

mov al, chr

mov bl, 07h

xor bh, bh

mov cx, kol