Структура і реалізація макромов

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

Дії (часто звані макро або макрос) є однорядковими скороченнями для групи команд. Використовуючи макрокоманду, програміст по суті визначає одну "команду" для представлення деякої послідовності команд.

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

У своїй простій формі макрокоманда є скорочення для позначення послідовності операцій

Розглянемо наступний набір команд, взятий з макромови IDE для Borland C ++ версії 3.1 (TEMC). Розглянемо наступну програму, написану за допомогою цих операцій

У наведеній програмі послідовність команд

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

Фактично, макропроцесор є окремий мовної процесор зі своєю власною мовою.

Формати макроозначень в різних системах може відрізнятися один від одного. В даному випадку послідовність команд, що визначає макрокоманду має наступний формат

MACRO

Псевдокоманда MACRO - перший рядок визначення - визначає наступний за нею ідентифікатор, як ім'я макрокоманди. Слідом за цим рядком розташовується послідовність команд, які називаються "тілом макровизначеннями". Визначення закінчується рядком з псевдокоманди END.

Якщо макрокоманда визначена, то використання імені відповідної макрокоманди як мнемоніки коду в програмі еквівалентно використанню відповідної послідовності команд. Якщо повторюється послідовності команд дати ім'я "MacPageUp", то наш приклад можна буде переписати таким чином:

цикл поки (ПРАПОР ВИХОДУ == 0)

читання наступного рядка ВХТ

якщо! (операція MACRO)

висновок рядка в ВИХТ1

> Поки! (Операція MEND)

перехід до компіляції

цикл поки! (ПРАПОР ВИХОДУ)

читання наступного рядка ВХТ

ЗНАЙДЕНО = пошук коду в МНТ

ПОКАЖЧИК = індекс із МНТ

Заповнення списку параметрів АЛА

читання слід. рядки з МДТ

> Поки! (Операція MEND)

інакше якщо! (операція MACRO)

висновок рядка в ВИХТ1

якщо (операція END) ПРАПОР ВИХОДУ = 1

запис імені і індексу в МНТ

приготувати масив списку АЛА

запис імені в МДТ

читання наступного рядка ВХТ

підстановка індексу операторів

додавання в МДТ

> Поки! (Операція MEND)

даний алгоритм є спрощенням алгоритму наведеного в [1], глава 4.3.2. Різниця полягає в тому, що сучасні засоби інтелектуалізації програмування дають нам можливість здійснювати вставки і видалення з великих масивів з мінімальними витратами процесорного часу, що було неможливо при використанні перфокарт. Крім того, швидкість роботи сучасних процесорів настільки велика, що дозволяє проводити прямі вставки і видалення в масивах даних середньої величини (скажімо, до 64 кілобайт) в режимі реального часу. Таким чином, розширення вихідного макросу може бути безпосередньо вставлено в масив вихідного тексту і оброблено в розширеному вигляді. Така технологія дозволяє значно спростити алгоритм обробки макромови.

РЕАЛІЗАЦІЯ ВСЕРЕДИНІ Асемблер

Багато функцій не треба реалізовувати двічі (наприклад, функції введення-виведення, перевірки на тип, тощо)

В процесі обробки відпадає необхідність створювати проміжні файли або масиви даних.

У програміста з'являються додаткові можливості щодо суміщення коштів асемблера (наприклад, команди EUQ) спільно з макрокомандами.

Програма повинна вимагати більше оперативної пам'яті, що є критичним на деяких типах ЕОМ, які не мають багато оперативної пам'яті.

Реалізація подібного типу завдання може виявитися на порядок складніше, ніж окрема реалізація асемблера і макропроцесора.

Макромови і відповідні їм Макропорцесори являють собою самостійну форму мов програмування. При використанні разом з асемблером, макропроцесор є для програміста корисним інструментом і по суті, дозволяє йому самому визначати свою мову "високого" рівня.

Існують чотири основних завдання, що вирішуються Макропорцесори:

Розширення макрокоманд і підстановка параметрів

Макропроцесор в асемблері може бути реалізований декількома способами:

У роботі над рефератом використовувалася наступна література:

[1] Дж. Джордан - "Системне програмування"

[2] IBM OS / 2 - "REXX Programmer's Reference"

[3] Borland C ++ - Included documentation and sources.

Структура і реалізація макромов

Tехнология

архітектура

Астрономія, авіація, космонавтика