Макромова та макрокоманди - Студопедія

Асемблер підтримує макромову, яка дає Вам можливість створити власні команди. Це особливо корисно, коли програма виконує окремі завдання кілька разів. Макромова дозволяє Вам:

  • Визначити власні макрокоманди, і перевизначити існуючі макрокоманди.
  • Спростити довгий чи складний асемблерний код.
  • Звернутися до макробібліотеків, створених архіватором.
  • Визначити умовні та повторювані блоки в межах макрокоманд.
  • Керувати рядками у межах макрокоманд.
  • Керувати лістингом розширення макрокоманд.

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

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

Використання макрокоманди – процес із 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.

МакрокомандаІм'я файлу у макробібліотеці
simplesimple.asm
add3add3.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)дуже потрібно