Макромова та макрокоманди - Студопедія
Асемблер підтримує макромову, яка дає Вам можливість створити власні команди. Це особливо корисно, коли програма виконує окремі завдання кілька разів. Макромова дозволяє Вам:
- Визначити власні макрокоманди, і перевизначити існуючі макрокоманди.
- Спростити довгий чи складний асемблерний код.
- Звернутися до макробібліотеків, створених архіватором.
- Визначити умовні та повторювані блоки в межах макрокоманд.
- Керувати рядками у межах макрокоманд.
- Керувати лістингом розширення макрокоманд.
Програми часто містять підпрограми, які виконуються кілька разів. Замість повтору вихідних інструкцій підпрограми Ви можете визначати підпрограму як макрокоманду, а потім викликати макрокоманду там, де Ви повторювали б цю підпрограму. Це спрощує та скорочує вашу вихідну програму.
Якщо Ви бажаєте викликати макрокоманду кілька разів, але кожного разу з різними даними, Ви можете призначити параметри в межах макрокоманди. Це дає Вам можливість забезпечувати різну інформацію макрокоманді щоразу, коли Ви її викликаєте. Макромова підтримує спеціальний символ, який називається символом заміни, який використовується для параметрів макрокоманди.
Використання макрокоманди – процес із 3 кроків.
Крок 1: Визначення макрокоманди
Ви повинні визначити макрокоманди, перш ніж ви можете використовувати їх у вашій програмі. Є два методи визначення макрокоманд:
- Макрокоманди можуть бути визначені на початку вихідного файлу або в файлі, що копіюється / включається.
- Макрокоманди можуть бути визначені в макробібліотеці. Макробібліотека є зібранням файлів у форматі архіву,створеному архіватором. Кожен елемент архівного файлу (макробібліотеки) може містити одне макровизначення, яке відповідає імені цього елемента. Ви можете звернутися до макробібліотеки, використовуючи .mlib директиву.
Крок 2: Виклик макрокоманди
Після того, як Ви визначили макрокоманду, викличте її, використовуючи ім'я макрокоманди як мнемоніку у тексті вихідної програми. Це називається викликом макрокоманди.
Крок 3: Розширення макрокоманди
Асемблер розгортає ваші макрокоманди, коли вихідна програма викликає їх. Під час розширення асемблер передає змінні аргументи параметрам макрокоманди, замінює інструкція макровиклику визначенням макрокоманди, потім транслює вихідний код. За замовчуванням макророзширення друкуються у файлі лістингу. Ви можете вимкнути роздруківку розширення, використовуючи директиву .mnolist. Для отримання додаткової інформації див. розділ 5.8, Використання директив для форматування лістингу.
Коли асемблер стикається з макровизначенням, він розміщує ім'я макрокоманди у таблиці кодів операцій (opcode table). Це перевизначає будь-яку попередньо визначену макрокоманду, бібліотечний вхід, директиву або мнемоніку команди, які мають те саме ім'я, що і дана макрокоманда. Це дозволяє розширити функції директив і команд, а також додати нові команди.
Визначення макрокоманд. Ви можете визначати макрокоманду десь у вашій програмі, але Ви повинні визначити її перш, ніж Ви зможете її використовувати. Макрокоманди можуть бути визначені на початку вихідного файлу, або в файлі, що копіюється/включається, або в макробібліотеці. Макровизначення можуть бути вкладеними, і вони можуть викликати інші макрокоманди, але всі елементи макрокоманди повинні бути визначені в тому жсамому файлі. Макровизначення – ряд вихідних інструкцій у наступному форматі:
ім'я макрокоманди.macro [параметр 1] [,.,параметр n]
- Ім'я макрокомандиназиває макрокоманду. Ви повинні помістити ім'я у полі мітки вихідної інструкції. Тільки перші 128 символів імені суттєві. Асемблер розміщує макро-ім'я у внутрішній таблиці кодів операцій, замінюючи будь-яку команду або колишнє макровизначення, що має те саме ім'я.
- Директива.macroідентифікує вихідну інструкцію як перший рядок макровизначення. Ви повинні розмістити .macro у полі коду операції.
- Параметр 1,…, параметр n- є необов'язковими символами заміни, які з'являються як операнди директиви .macro.
Приклад. Визначення, виклик та розширення макрокоманди. Код визначає макрокоманду sadd4 із чотирма параметрами r1, r2, r3, r4.
1 sadd4 .macro r1,r2,r3,r4
2 sadd4 r1, r2, r3, r4
4 r1 = r1 + r2 + r3 + r4
Макровизов: наступний код викликає макрокоманду sadd4 з чотирма параметрами:
11 00000000 sadd4 A0, A1, A2, A3
Макробібліотеки. Один із способів визначення макрокоманд – створення макробібліотеки. Макробібліотека - зібрання файлів, що містять макровизначення. Ви повинні використовувати архіватор, щоб зібрати ці файли, або елементи в одному файлі (називається архівом). Кожен елемент макробібліотеки містить одне макровизначення. Файли в макробібліотеці мають бути не відтрансльованими вихідними файлами. Ім'я макрокоманди та ім'я елемента мають бути однаковими, а розширення імені файлу з макрокомандою має бути .asm.
| Макрокоманда | Ім'я файлу у макробібліотеці |
| simple | simple.asm |
| add3 | add3.asm |
Ви можете звертатися до макробібліотеки, використовуючи .mlib директиву асемблера.Синтаксис:.mlib ім'я файлу
Коли асемблер стикається з .mlib директивою, він відкриває названу (в імені файлу) бібліотеку та створює таблицю змісту бібліотеки. Асемблер вводить імена індивідуальних елементів бібліотеки в таблиці кодів операцій як бібліотечні входи; це перевизначає будь-які існуючі коди операції або макрокоманди, які мають те саме ім'я. Якщо одна з цих макрокоманд викликається, асемблер отримує вхід бібліотеки і завантажує його в таблицю макрокоманд.
Асемблер розгортає цей бібліотечний вхід так само, як він розгортає інші макрокоманди. Вилучаються ті макрокоманди, які фактично викликаються з бібліотеки, і вони витягуються лише один раз.
Рекурсивні та вкладені макрокоманди. Макромова підтримує рекурсивні та вкладені макровиклики. Це означає, що можна викликати інші макрокоманди всередині макровизначення. Можна вкладати макрокоманди глибиною до 32 рівнів. Коли Ви використовуєте рекурсивні макрокоманди, Ви викликаєте макрокоманду з її визначення (макрокоманда викликає саму себе).
Коли ви створюєте рекурсивні або вкладені макрокоманди, ви повинні звернути особливу увагу на аргументи, які ви передаєте макропараметрам, тому що асемблер використовує динамічний огляд параметрів. Це означає, що макрокоманда, що викликається, використовує навколишнє середовище макрокоманди, з якої вона викликана.
Наступні директиви можна використовувати з макрокомандами. Директиви .macro, .mexit, .endm і .var допустимі лише з макрокомандами; Директиви, що залишилися, - загальні директиви мови асемблера.
| Мнемоніка та синтаксис | Опис |
| .endm | Завершує макровизначення |
| Ім'я .macro [параметр 1] [, . параметр n] | Визначає макрокоманду із зазначеним ім'ям |
| .mexit | Виконує перехід до .endm |
| .mlib ім'я файлу | Вказує бібліотеку, що містить макровизначення |
Управління символами заміни:
| Мнемоніка та синтаксис | Опис |
| .asg [“] рядок знаків [“] | Призначає знаковий рядок символу заміни |
| .eval чіткий вираз, символ заміни | Виконує арифметику на числовому символі заміни |
| Мнемоніка та синтаксис | Опис |
| .break [чітке вираз] | Перериває трансляцію блоку, що повторюється (необов'язкова) |
| .endif | Закінчує умовну трансляцію |
| .endloop | Закінчує трансляцію блоку, що повторюється. |
| .else | Необов'язковий умовний блок |
| .elseif чіткий вираз | Необов'язковий умовний блок |
| .if чіткий вираз | Починає умовну трансляцію |
| .loop [чітке вираз] | Починає трансляцію блоку, що повторюється. |
Створення повідомлень під час трансляції:
| Мнемоніка та синтаксис | Опис |
| .emsg | Надсилає повідомлення про помилку стандартного пристрою виводу |
| .mmsg | Надсилає повідомлення стандартному пристрою виводу |
| .wmsg | Посилає попередження стандартного пристрою виводу |
| Мнемоніка та синтаксис | Опис |
| .drlist | Дозволяє друк усіх директив лістингу |
| .fcnolist | Пригнічує друк певних директив листингу |
| .fclist | Дозволяє роздруковувати помилкові умовні блоки (за замовчуванням) |
| .fcnolist | Пригнічує роздруківку помилкових умовних блоків |
| .mlist | Дозволяє роздруківку макрокоманди (за замовчуванням) |
| .mnolist | Пригнічує роздрук макрокоманди |
| .sslist | Дозволяє роздрукувати розширення символів заміни |
| .ssnolist | Пригнічує листинг розширень символів заміни (за замовчуванням) |
Чи не знайшли те, що шукали? Скористайтеся пошуком:
Вимкніть adBlock! і оновіть сторінку (F5)дуже потрібно