Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_2011.doc
Скачиваний:
65
Добавлен:
09.12.2018
Размер:
1.15 Mб
Скачать

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

Пример:

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

Int 10h; вывод символа

ret

asmproc endp

end main

  1. Возврат данных в вызывающую программу

Программа на ассемблере возвращает результат в регистрах:

  • ax – слово

  • al – байт

  • в паре dx:ax – двойное слово: dx – старшие разряды, ax–младшие

  • в паре dx:ax – указатель: dx – адрес сегмента, ax – смещение

Пример взаимодействия программ

Программа на языке Pascal

Program prg;

function addasm : word; external;

{$L <имя>, obj} ; подключение объектного файла

var

value1: word;

value2:word;

rez:word;

begin

value1:=2;

value2:=3;

rez:=addasm;

writeln ('Результат:', rez);

end.

Программа на языке Assembler

masm

model small

data segment word public

extrn value1:word

extrn value2:word

data ends

.code

assume ds:data

main:

addasm proc near

public addasm

mov cx,ds:value1

mov dx,ds:value2

add cx,dx ; суммирование

mov ax,cx ; ax загружается результатом

ret

addasm endp

end main

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]