Міністерство освіти і науки УкраїниНаціональний технічний університет України
«Київський політехнічний інститут ім. І. Сікорського»
Кафедра автоматизації проектування енергетичних процесів і систем
Лабораторна робота №8
з дисципліни «Операційні системи»
«Макрозасоби мови Асемблер»
КИЇВ-2022
Лабораторна робота №8
Мета роботи: Вивчення макросів, макрокоманд та макророзширень та їх застосування в асемблерних програмах.
Теоретична частина
Обробка програми на асемблері з використанням макрозасобів неявно здійснюється транслятором у дві фази: вихідна програма на асемблері (містить макроси); перша фаза трансляції: макроасемблер; вихідна програма з внутрішнім представленням компілятора (без макросів); друга фаза трансляції: асемблер; об’єктний модуль.
Макрозасоби Асемблера IBM PC мають три складові:
Макровизначення (макрос) – набір команд, який містить опис якоїсь дії або алгоритму. Макрос повинен знаходитися на початку програми, до визначення сегментів.
Синтаксис макровизначення:
ім’я_макроса MACRO [список_формальних_аргументів]
;; тіло макровизначення
Еndm
Макрокоманда – коротке посилання на макровизначення (виклик макроса):
ім’я_макроса MACRO [список_формальних_аргументів]
Макророзширення (макропідстановка, макровставка) – вставка замість макрокоманди макроса з заміною формальних параметрів на фактичні (якщо вони є).
Макровизначення може бути простим та вкладеним, тобто містити у собі інше макровизначення. Рівень вкладання макровизначень може бути будь-яким, з одного макроса можна викликати інші макроси.
Існує три варіанти де повинні розташовуватися макровизначення:
На початку тексту програми до сегмента коду та даних. Цей варіант використовується тоді, коли визначені користувачем макрокоманди є актуальними в межах однієї програми.
В окремому файлі.
Такий варіант підходить при роботі з декількома програмами однієї проблемної області. Для того, щоб зробити доступними макровизначення у конкретній програмі, слід записати директиву include ім’я_файлу.
В макробібліотеці.
Універсальні макрокоманди, які часто використовуються в програмах користувача, (наприклад, фрагменти програмної затримки, призупинення програми до натискання клавіші, перетворення двійкових чисел у символьну форму) доцільно записати в макробібліотеку. Макробібліотека являє собою файл з текстами макровизначень, які записуються у цей файл, як у текст програми. Файл макробібліотеки може мати будь-яке ім’я і розширення, наприклад, MYMACRO.MAC. В програмі залишаються тільки макровиклики. Включати макрокоманди з цієї бібліотеки в програму також можна за допомогою директиви include (наприклад, include mymacro.mac ). Після цього у програмі можна використовувати будь-які макрокоманди з цієї макробібліотеки.
PURGE ім’я_макроса відміняє визначений раніше макрос (не підтримується WASM). Ця директива часто застосовується відразу після INCLUDE, програми, що включила в текст, файл з великою кількістю готових макроозначень.
Для організації циклу у макровизначенні мітку треба оголосити за допомогою оператора local.
LOCAL мітка... перераховує мітки, які застосовуватимуться усередині макроозначення, щоб не виникало помилки «мітка вже визначена» при використанні макросу більше одного разу або якщо та ж мітка присутня в основному тексті програми (в WASM директива LOCAL дозволяє використовувати макрос з мітками кілька разів, але не дозволяє застосовувати мітку з тим же ім'ям в програмі). Операнд для LOCAL мітка або список міток, які використовуватимуться в макросі.
Завдання
Створіть максимальну можливу кількість макросів для вашої задачі та вставте у програму їх виклики.
Індивідуальне завдання (варіант 11): у сегменті даних створити лінійний масив, який містить 12 символьних величин. Вивести їх у зворотному порядку, розмістивши по три в рядок через чотири пропуски. Результат вивести на екран.
Код програми:
; Лабораторна робота 8
; Тимкова А.В., ТР-15, 23.06.2022
; Макрозасоби мови Асемблер
; 11 варіант
; Макрос виведення символу '-'
printMinus macro
push a...