Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Programmirovanie_Lektsii_2015.doc
Скачиваний:
105
Добавлен:
22.03.2016
Размер:
1.19 Mб
Скачать

Макроповторения

Блок повторения имеет следующую структуру:

<заголовок>

<тело>

ENDM

Различают три варианта блока повторения:

REPT-блоки, IRP-блоки, IRPC-блоки.

  1. REPT-блоки

REPT k

<тело>

ENDM

Пример:

REPT 3

SHR AX, 1

ENDM

SHR AX, 1

SHR AX, 1

SHR AX, 1

Пример:

N EQU 6

REPT N-4

DB 0, 1

DW ?

ENDM

N EQU 6

DB 0, 1

DW ?

DB 0, 1

DW ?

  1. IRP-блоки

IRP p, <v1, …, vk>

<тело>

ENDM

p – некоторое имя, формальный параметр; vi – фактические параметры.

Пример:

IRP REG, <AX,CX,SI>

PUSH REG

ENDM

PUSH AX

PUSH CX

PUSH SI

  1. IRPC-блоки

IRPC p, s1…sk

<тело>

ENDM

p – некоторое имя, формальный параметр; si – символы, кроме пробелов и точек с запятой.

Пример:

IRPC D,17W

ADD AX,D

ENDM

ADD AX,1

ADD AX,7

ADD AX,W

Макрооператоры

Макрооператоры – операторы, разрешенные к применению только в конструкциях макроязыка.

Оператор замены (&)

& параметр

Пример:

IRP W, <1, 6>

VAR&W DW ?

ENDM

VAR1 DW ?

VAR6 DW ?

Оператор выделения текста (<>)

Пример:

IRP VAL, <<1,2>, 3>

DB VAL

ENDM

IRPC S,<A;B>

DB ‘&S’

ENDM

DB 1,2

DB 3

DB ‘A’

DB ‘;’

DB ‘B’

IRP VAL, <<1,2>, 3>

DB VAL

ENDM

DB 1,2

DB 3

Оператор выделения символа (!)

Пример:

IRPC X,<A!>B,Привет>

DB ‘&X’

ENDM

DB ‘A>B’

DB ‘Привет’

Оператор выражения (%)

% <константное выражение>

Пример:

K EQU 4

IRP A,<K+1,%K+1,W%K+1>

DW A

ENDM

DW K+1

DW 5

DW W5

Комментарий макроопределения (;;)

Пример:

IRP R,<AX,BX>

;; восстановление регистров

POP R

ENDM

POP AX

POP BX

Директива local

LOCAL v1, …, vk

vi – имена, используемые в макроопределении (метки).

Макрогенератор будет заменять эти имена на специальные имена вида ??хххх, где хххх – четырехзначное шестнадцатеричное число.

Пример:

mRepeat macro char, count

local L1

mov cx,count

L1:mov ah,2

mov dl,char

int 21h

loop L1

endm

mRepeat ‘A’,10

mov cx,10

??0000:mov ah,2

mov dl,’A’

int 21h

loop ??0000

mRepeat ‘*’,20

mov cx,20

??0001:mov ah,2

mov dl,’*’

int 21h

loop ??0001

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