На головну

Макроозначення і макроси

Розробка програм мови асемблера - досить трудомісткий процес, що вимагає найчастіше простого повторення одних і тих же багато разів зустрічаються операцій. Прикладом може служити послідовність команд, які виконуються кожен раз для організації стекового дисплея пам'яті при вході в процедуру або функцію.

Дисплей пам'яті процедури (функції) - Це область даних, доступних для обробки в цій процедурі (функції). Для полегшення праці розробника були створені так звані макроси.

Макрокоманда - Це текстова підстановка, в ході виконання якої кожен ідентифікатор певного виду замінюється на ланцюжок символів з деякого сховища даних.

З макрокомандами пов'язані поняття макрогенерацій, макророзширення, макропідстановка і макропроцесор.

макрогенерацій - Процес виконання дії.

макророзширення - Це ланцюжок символів, що отримується в результаті виконання дії.

Процес виконання макрокоманд полягає в послідовному перегляді тексту вихідної програми, виявленні в ньому певних ідентифікаторів і їх заміні на відповідні рядки символів.

макропідстановка - Це текстова заміна одного ланцюжка символів (ідентифікатора) на іншу ланцюжок символів (рядків).

Для того щоб вказати, які ідентифікатори на які рядки необхідно замінювати, служать макроозначення. Макроозначення присутні безпосередньо в тексті вихідної програми. Вони виділяють спеціальними ключовими словами або роздільниками, які не можуть зустрічатися ніде більше в тексті програми. В процесі обробки все макроозначення повністю виключаються з тексту вхідний програми, а що міститься в них інформація запам'ятовується для обробки при виконанні макрокоманд. Макровизначення може містити параметри. Тоді кожна відповідна йому макрокоманда повинна при виклику містити рядок символів замість кожного параметра. Цей рядок підставляється під час виконання макрокоманди в кожне місце, де в макровизначеннями зустрічається відповідний параметр. Як параметр макрокоманди може виявитися інша макрокоманда, тоді вона буде рекурсивно викликана всякий раз, коли необхідно виконати підстановку параметра. В принципі макроси можуть утворювати послідовність рекурсивних викликів, аналогічну послідовності рекурсивних викликів процедур і функцій, але тільки замість обчислень і передачі параметрів вони виконують лише текстові підстановки.

Макропроцесор (макрогенератор) - Це спеціальний модуль, що обробляє макроси і макроозначення.

Макропроцесор отримує на вхід текст вихідної програми, що містить макроозначення і макроси, а на виході його з'являється текст макророзширення вихідної програми, а не містить макроозначень і макрокоманд. Обидва тексти є тільки текстами програми, ніяка інша обробка не виконується. Саме макророзширення вихідного тексту надходить на вхід компілятора. Синтаксис макрокоманд і макроозначень не є строго заданим. Він може відрізнятися в залежності від реалізації компілятора з мови асемблера. Але сам принцип виконання макропідстановок в тексті програми незмінний і не залежить від їх синтаксису.

Макрогенератор частіше за все не існує у вигляді окремого програмного модуля, а входить до складу компілятора мови асемблера. Макророзширення вихідної програми зазвичай недоступно її розробнику. Більш того, макропідстановки можуть виконуватися послідовно при розборі початкового тексту на першому проході компілятора разом з розбором всього тексту програми, і тоді макророзширення вихідної програми в цілому може і зовсім не існувати як таке. Розглянемо спосіб завдання дії.

Завдання макрокоманди:

push_stack macro

push r16

push r17

push PSW

endm

Семантика цієї макрокоманди полягає в запису в стек регістрів r16, r17, PSW. Коли в тексті зустрітися макрокоманда «Push_stack macro», вона буде замінена в результаті макропідстановки на послідовність команд: push r16, push r17, push

PSW.

Макроозначення і макроси знайшли застосування не тільки в мовах асемблера, але і в багатьох мовах високого рівня. Там їх обробляє спеціальний модуль, званий препроцесором мови. Принцип обробки залишається тим же самим, що і для програм на мові асемблера - препроцесор виконує текстові підстановки безпосередньо над рядками мамою вихідної програми.

 



Інтерпретатори. Особливості побудови інтерпретаторів | відладчики

Програмний введення-виведення | Програмні рівні введення-виведення | обробники переривань | драйвери пристроїв | Апаратна частина таймерів | Програмне забезпечення таймерів | м'які таймери | транслятор | компілятор | Поняття проходу. Багатопрохідний і однопрохідні компілятори |

© um.co.ua - учбові матеріали та реферати