Лекція № 13
Програмні засоби макромови
В МП Intel 8080 є макрозасоби. Макрокоманди можна використовувати для того, щоб ввести зручне позначення для команд, що існують, розширити систему команд, позначити одним оператором цілу сукупність команд. Для кожної макрокоманди необхідно скласти визначення й присвоїти йому унікальне ім’я. Макрокоманди не можуть включати в себе ні визначення інших макрокоманд, ні посилання на самих себе. Разом з тим вони можуть мати посилання на інші макрокоманди.
В реальній програмі часто зустрічаються однакові групи команд, які відрізняються операндами. В таких випадках, групі команд, яка повторюється в різних місцях програми, присвоюється деяке ім'я. Якщо після цього в програмі в якості команди буде вказане це ім'я, то автоматично замість нього буде підставлена необхідна група команд. Присвоєння групі команд імені називається макровизначенням, а вживання цього імені при написанні програми - макровикликом.
Макровизначення.
Перед використанням у програмі макрозасоби повинні бути визначені. Макровизначення починається оператором MACRO, біля якого ставиться ім'я, по якому надалі буде викликатися з допомогою макровиклику описане макровизначення. У заголовку макровизначення крім імені оператора MACRO вказується список формальних параметрів, що будуть при створенні макророзширення замінені фактичними параметрами. Набір операторів макровизначення між операторами MACRO і ENDM називається тілом макровизначення.
Оператор MACRO має синтаксис:
(ім'я) MACRO (список формальних параметрів)
Ім'я в полі імені задає ім'я тіла макровизначення. Як ім'я оператора MACRO припустиме будь-яке ім'я, що задовольняє правилам побудови імен. Ім'я завжди повинне бути присутнім і не повинне відокремлюватися від оператора двокрапкою, а тільки пробілами. Як формальні параметри можна використовувати будь-який набір припустимих імен, розділених комами. Список імен може бути порожнім.
Приклади
CLR MACRO Обнулення А і встановлення Сy=0
SUB A
END M
Введення за допомогою макрозасобів мнемоніки CLR робить використання цієї команди (SUB A) більш наглядним.
Операція NOR (АБО-НІ)
NOR MACRO REG
ORA REG
CMA
ENDM
В макрокоманді NOR використовується операнд REG.
Макровиклик та макророзширення.
Макровизначення може бути викликане довільну кількість разів за допомогою макровикликів, що містять ім'я макровизначення і довільне число фактичних параметрів, що замінять формальні при створенні макророзширення. Вчасне асемблювання замість кожного макровиклику по тілу макровизначення генерується макророзширення; формальні параметри заміняються фактичними.
Синтаксис макровиклику:
(ім'я): (ім'я макровизначення) (список фактичних параметрів)
Асемблер повинен зустріти макровизначення до макровиклику, в іншому випадку макровиклик буде сприйнятий як невірний код команди .
При використанні макрозасобів програміст повинен враховувати наступні правила:
кожна макрокоманда повинна мати унікальне ім’я;
макровизначення повинно починатися з псевдооперації MACRO і закінчуватися псевдооперацією ENDM;
імена, що визначенні в макрокоманді, локалізовані в ній і не визначені в головній програмі;
макровизначення не повинні включати інших макровизначень.
При програмуванні на мові ASM-80, використовуються псевдокоманди умовного асемблеювання IF та ENDIF, які дозволяють ассемблеювати фрагменти програми умовно. Умовне ассемблеювання доцільно використовувати, якщо програма потребує виконання окремих фрагментів із деяких загальних.
Приведене нижче макровизначення здійснює зсув вмісту акумулятора вліво чи вправо:

Асемблер обчислює вираз, що стоїть в полі операнда псевдокоманди IF. Якщо результат дорівнює нулю, то команди між IF і ENDIF в результуючу програму не включаються. Якщо ж результат обчислення виразу не дорівнює нулю, то команди між IF і ENDIF ассемблюються звичайним чином. Так, якщо в макровиклику напрямок зсуву задано параметром DIR, як L, тобто :

то вираз в першій псевдокоманді IF дорівнює нулю і команди зсува вправо і очистка старшого біта не асемблюються. Вираз в другій псевдокоманді IF не дорівнює нулю і відповідні команди будуть включені в результуючу програму, тобто :

Умовне ассемблеювання може використовуватись і ззовні макровизначень. Блоки IF-ENDIF можуть бути вкладеними один в одного. Максимальний рівень вкладеності - 8.