Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
программирование ассемблер(лекция).doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
798.72 Кб
Скачать

Макродирективалар

Ассемблер тілінің макроқұралдарының көмегімен макроанықтағышқа кіретін жолдарды өзгертуге және жолдарды енгізу жиынын модификациялауға, сондай-ақ жолдардың орындалу тәртібінде өзгертуге болады. Бұлар макродиректива жиындарының көмегімен жасалады (макродиректива ары қарай директива деп қаралады). Оларды екі топқа бөлуге болады:

- WHILE, REPT, IRP және IRPC қайталау директивалары. Бұл топ директивалары макрос құру үшін қолданылады, олар бірінен соң бірі жол орналасқан тізбекті жолдардан тұрады. Бұл жолдардың кей жерлері модификациялануы мүмкін.

- EXITM және GOTO директивалары макрокеңейтуді генерациялау процесін басқару үшін қолданылады. Олар сәйкесінше макроанықтағыш жолдар жиынынан тұратын макрокеңейту процесін қалыптастыруды басқару үшін қолданылады. Бұл директивалардың көмегімен макрокеңейтулердегі кейбір жолдарды алып тастауға және генерация процесін тоқтатуға болады. EXITM және GOTO директивалары әдетте компиляцияның шартты директиваларымен бірге қолданылады, сондықтан оларды қарап кетейік.

While және rept директивалары

WHILE және REPT директивалары кейбір жолдар тізбегін анықталған бірнеше рет қайталауды орындау үшін қолданылады. Бұл директивалардың синтаксисисі келесі түрде беріледі:

WHILE тұрақты_өрнек

тізбекті_жолдар

ENDM

REPT тұрақты_өрнек

тізбекті_жолдар

ENDM

Келесі екі IRP және IRPC директивалары, бұл процесті ыңғайлы етеді, яғни әрбір итерация сайын кейбір тізбекті_жолдардағы элементтерді модификациялауға мұрсат береді.

Irp директивасы

IRP директивасының синтаксисі:

IRP формальды_аргумент, <жолдар_символы_1,...,жолдар_символы_N>

тізбекті_жолдар

ENDM

Бұл директиваның қызметі, тізбекті_жолдарды N рет қайталайды, яғни, IRP директивасының екінші операндында берілген үшбұрыш символдарына қанша жолдар_символы жазылса сонша рет қайталайды. Ал тізбекті_жолдарды қайталау формальды_аргументпен орындалатын екінші операндтағы жолдар символымен ауыстырылады. Сонымен бірінші генерация кезінде жолдар_символы_1 ауысады. Егер жолдар_символы_2 бар болса онда екінші генерация орындалады, яғни тізбекті_жолдардағы формальды_аргумент жолдар_символы_2 ауысады, осылайша жолдар_символы_N дейін қайталана береді.

Мысалы, прорграммадағы келесі конструкцияны анықтау нәтижесін қарайық:

irp ini,<1,2,3,4,5>

db ini

endm

Макрогенератормен келесі макрокеңейту генерацияланады:

db 1

db 2

db 3

db 4

db 5

Irpc директивасы

IRPC директивасының синтаксисі:

IRPC формальды_аргумент, жолдар_символы

тізбекті_жолдар

ENDM

Берілген директива IRP ұқсас, бірақ ол әрбір итерация кезінде формальды_аргументті кезектегі жолдар_символыда орналасқан символмен ауыстыратындығымен ерекшеленеді. Сәйкесінше тізбекті_жолдардағы қайталау жолдар_символындағы символдардың санымен анықталады. Мысалы:

irpc rg,

push rg&x

endm

Генерация процесі кезінде макрогенератормен келесі макрокеңейту генерацияланады :

push ax

push bx

push cx

push dx

Шартты компиляция директивалары

EXITM директивасы операндтары болмайды, бұл директиваның қызметі макроанықтағышта кездескен жерінен бастап макрокеңейту процесін тез арада тоқтату болып табылады.

GOTO таңба_аты директивасы макроанықтағыштағы генерация процесін басқа орынға ауыстырады.