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

Фрагмент модуля 2

push bp

mov bp,sp

mov ax,[bp+6]

mov bx,[bp+8]

mov cx,[bp+10]

add bx,ax

pop bp

ret6

BP

CS

IP

Dat3

Dat2

Dat1

sp

bp+6

bp+8

bp+10

  1. Возврат результата из процедуры

Способы возврата:

  1. Через свободный регистр.

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

  3. Через стек. Программист резервирует некоторую область стека с целью возврата в этой области результата работы процедуры.

На рисунке показан вариант резервирования стека для возврата двух параметров.

BP

CS

IP

Dat3

Dat2

Dat1

V

SP

AR2

VAR1

  1. Макрокоманды и макроопределения

Использование макрокоманд позволяет:

1) Упростить и сократить исходный текст программы.

2) Сделать программу более понятной.

3) Уменьшить количество ошибок.

4) Увеличить быстродействие за счет замены процедур макросами.

Примеры использования макрокоманд:

  • операции ввода/вывода,

  • инициализация регистров,

  • выполнение прерываний,

  • выполнение арифметических операций,

  • работа со строковыми переменными.

Структура макроопределения:

NAME MACRO [PAR1, PAR2, …]

;текст

ENDM

Если в тексте программы указать имя (макрокоманду), то будет выполнен код макроопределения с учетом фактических параметров.

  1. Особенности трансляции при получении объектного модуля

1. Происходит вставка макрорасширений в то место программы, где находятся макрокоманды.

2. Формируется модуль с расширением .obj.

Длина самой программы может оказаться в несколько раз больше, чем исходной, т.к. в программу вставляются макрорасширения.

  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.

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