Міністерство освіти і науки УкраїниНаціональний технічний університет України
«Київський політехнічний інститут ім. І. Сікорського»
Кафедра автоматизації проектування енергетичних процесів і систем
Лабораторна робота №8
з дисципліни «Операційні системи»
«Макрозасоби мови Асемблер»
Варіант - 15
Мета роботи: Вивчення макросів, макрокоманд та макророзширень та їх застосування в асемблерних програмах.
Індивідуальне завдання:
/
Теоретичні відомості
Обробка програми на асемблері з використанням макрозасобів неявно здійснюється транслятором у дві фази:
/Макроасемблер в загальній схемі трансляції програми TASM
Макрозасоби Асемблера IBM PC мають три складові:
1. Макровизначення (макрос) – набір команд, який містить опис якоїсь дії або алгоритму. Макрос повинен знаходитися на початку програми, до визначення сегментів.
2. Макрокоманда – коротке посилання на макровизначення (виклик макроса)
3. Макророзширення (макропідстановка, макровставка) – вставка замість макрокоманди макроса з заміною формальних параметрів на фактичні (якщо вони є).
Макровизначення може простим та вкладеним, тобто містити у собі інше макровизначення. Рівень вкладання макровизначень може бути будь-яким, з одного макроса можна викликати інші макроси.
Існує три варіанти де повинні розташовуватися макровизначення:
1. На початку тексту програми до сегмента коду та даних.
Цей варіант використовується тоді, коли визначені користувачем макрокоманди є актуальними в межах однієї програми.
2. В окремому файлі.
Такий варіант підходить при роботі з декількома програмами однієї проблемної області. Для того, щоб зробити доступними макровизначення у конкретній програмі, слід записати директиву include ім’я_файлу
3. В макробібліотеці.
Універсальні макрокоманди, які часто використовуються в програмах користувача, (наприклад, фрагменти програмної затримки, призупинення програми до натискання клавіші, перетворення двійкових чисел у символьну форму) доцільно записати в макробібліотеку. Макробібліотека являє собою файл з текстами макровизначень, які записуються у цей файл, як у текст програми. Файл макробібліотеки може мати будь-яке ім’я і розширення, наприклад, MYMACRO.MAC. В програмі залишаються тільки макровиклики. Включати макрокоманди з цієї бібліотеки в програму також можна за допомогою директиви include (наприклад, include mymacro.mac ). Після цього у програмі можна використовувати будь-які макрокоманди з цієї макробібліотеки.
Недоліком двох останніх способів є той факт, що у вихідний текст програми включаються абсолютно усі макровизначення. Для усунення цього недоліку використовується директива purge, в якості операндів через кому слід перелічити імена макрокоманд, які не повинні включатися в тіло програми.
PURGE ім’я_макроса відміняє визначений раніше макрос (не підтримується WASM). Ця директива часто застосовується відразу після INCLUDE, програми, що включила в текст, файл з великою кількістю готових макроозначень.
В цьому прикладі у вихідний текст програми перед початком компіляції TASM замість рядка include iomac.inc вставить рядки з файлу iomac.inc, однак у ньому будуть відсутні макровизначення _outstr та _exit.
Для організації циклу у макровизначенні мітку треба оголосити за допомогою оператора local.
LOCAL мітка... перераховує мітки, які застосовуватимуться усередині макроозначення, щоб не виникало помилки «мітка вже визначена» при використанні макросу більше одного разу або якщо та ж мітка присутня в основному тексті програми (в WASM директива LOCAL дозволяє використовувати макрос з мітками кілька разів, але не дозволяє застосовувати мітку з тим же ім'ям в програмі). Операнд для LOCAL мітка або список міток, які використовуватимуться в макросі.
Виконання роботи:
Код програми:
/
/
/
Створення та виконання fund8.exe файлу:
/
/
Вигляд fund8.exe у TD:
/
Виконаємо програму за клавішою F9 та подивимось результат за комбінацією alt+F5.
/
Висновок: Під час виконання даної лабораторної роботи було вивчено та набуто навичок роботи з макрозасобами мови Ассемблер.