Макрозасоби мови Асемблер

Інформація про навчальний заклад

ВУЗ:
Національний технічний університет України Київський політехнічний інститут
Інститут:
О
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2022
Тип роботи:
Звіт до лабораторної роботи
Предмет:
Операційні системи

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний технічний університет України «Київський політехнічний інститут імені Ігоря Сікорського» Теплоенергетичний факультет Кафедра автоматизації проектування енергетичних процесів і систем Звіт до лабораторної роботи №8 з дисципліни «Операційні системи» Тема « Макрозасоби мови Асемблер » Варіант 3 Мета роботи: Вивчення макросів, макрокоманд та макророзширень та їх застосування в асемблерних програмах.  Теоретичні відомості Обробка програми на асемблері з використанням макрозасобів неявно здійснюється транслятором у дві фази:  / Макрозасоби Асемблера IBM PC мають три складові: 1. Макровизначення (макрос) – набір команд, який містить опис якоїсь дії або алгоритму. Макрос повинен знаходитися на початку програми, до визначення сегментів. 2. Макрокоманда – коротке посилання на макровизначення (виклик макроса) 3. Макророзширення (макропідстановка, макровставка) – вставка замість макрокоманди макроса з заміною формальних параметрів на фактичні (якщо вони є). Макровизначення може простим та вкладеним, тобто містити у собі інше макровизначення. Рівень вкладання макровизначень може бути будь-яким, з одного макроса можна викликати інші макроси. Існує три варіанти де повинні розташовуватися макровизначення: На початку тексту програми до сегмента коду та даних. Цей варіант використовується тоді, коли визначені користувачем макрокоманди є актуальними в межах однієї програми. В окремому файлі. Такий варіант підходить при роботі з декількома програмами однієї проблемної області. Для того, щоб зробити доступними макровизначення у конкретній програмі, слід записати директиву include ім’я_файлу В макробібліотеці. Універсальні макрокоманди, які часто використовуються в програмах користувача, (наприклад, фрагменти програмної затримки, призупинення програми до натискання клавіші, перетворення двійкових чисел у символьну форму)  доцільно записати в макробібліотеку.  Макробібліотека являє собою файл з текстами макровизначень, які записуються у цей файл, як у текст програми. Файл макробібліотеки може мати будь-яке ім’я і розширення, наприклад,  MYMACRO.MAC. В програмі залишаються тільки макровиклики. Включати макрокоманди  з цієї бібліотеки в програму також можна за допомогою директиви include  (наприклад, include mymacro.mac ). Після цього у програмі можна використовувати будь-які макрокоманди з цієї макробібліотеки. Недоліком двох останніх способів є той факт, що у вихідний текст програми включаються абсолютно усі макровизначення. Для усунення цього недоліку використовується директива purge, в якості операндів  через кому слід перелічити імена макрокоманд, які не повинні включатися в тіло програми. PURGE ім’я_макроса  відміняє визначений раніше макрос (не підтримується WASM). Ця директива часто застосовується відразу після INCLUDE, програми, що включила в текст, файл з великою кількістю готових макроозначень. В цьому прикладі у вихідний текст програми перед початком компіляції TASM замість рядка include iomac.inc вставить рядки з файлу iomac.inc, однак у ньому будуть відсутні макровизначення _outstr та _exit.  Для організації циклу у макровизначенні мітку треба оголосити за допомогою оператора local. LOCAL мітка...  перераховує мітки, які застосовуватимуться усередині макроозначення, щоб не виникало помилки «мітка вже визначена» при використанні макросу більше одного разу або якщо та ж мітка присутня в основному тексті програми (в WASM директива LOCAL дозволяє використовувати макрос з мітками кілька разів, але не дозволяє застосовувати мітку з тим же ім'ям в програмі). Операнд для LOCAL  мітка або список міток, які використовуватимуться в макросі. Індивідуальні завдання: Створіть максимальну можливу кількість макросів для вашої задачі та  вставте у програму їх виклики. В сегменті даних створити двовимірний масив, який складається з 15  натуральних чисел, розміщених у трьох рядках та п’яти стовпцях (масив  відобразити на екрані). Піднести до другого ступеня останній елемент кожного  стовпця. Результат вивести на екран. Код програми: ;Макрос завершення програми EndProgram Macro mov ax, 4c00h int 21h endm ;Макрос виведення знаку '-' Minus Macro push ax dx mov ah, 02h mov dl, '-' int 21h pop dx ax endm ;Макрос виведення символу переносу рядка EndLine Macro push ax dx mov ah, 02h mov dl, 10 int 21h pop dx ax endm ;Макрос для виведення пробілу Space Macro push ax dx mov ah, 02h mov dl, ' ' int 21h pop dx ax endm ;Макрос для перевірки кінця рядка CheckEndLine Macro num, divv local chck push ax bx dx mov ax, num mov dx, 0 cwd idiv divv cmp dx, 0 jne chck EndLine chck: pop dx bx ax endm ;Макрос завантаження сегменту даних Data Macro mov ax, @data mov ds, ax endm ;Макрос виведення числа PrintNum Macro num local plus local print local exit push ax bx dx cx mov ax, num cmp ax, 0; ax = 0 jge plus neg ax mov num, ax Minus plus: mov ax, num; ax = num mov cx, 0; cx = 0 print: mov dx, 0 mov bx, 10 div bx mov bx, ax mov ax, dx add ax, 30h push ax inc cx mov ax, bx cmp ax, 0 je exit jmp print exit: mov ah, 02h pop bx mov dl, bl int 21h loop exit pop cx dx bx ax endm ;Макрос для виконання математичних операцій ArrOperations Macro arr, aSize local lp local noChng push ax bx cx dx si di mov cx, aSize mov bx, 0 ; bx - Лічильник mov si, 0 ; si - ітератор в циклі mov di, 0 lp: mov ax, arr[si] cmp bx, 4 jne noChng cwd imul ax ; множимо число саме на себе mov bx, -1 noChng: mov arr[si], ax add si, 2 inc bx loop lp pop si dx cx bx ax pop si dx cx bx ax endm ;Макрос виведення масива ArrPrint Macro arr,aSize local lp push ax bx cx si mov bx, 10 mov cx, aSize mov si, 0 lp: mov ax, arr[si] add si, 2 printNum ax Space checkEndLine si, bx loop lp pop si cx bx ax endm .model small .stack 100h .data ; Вихідний масив arr dw 1, 2, 3, 4, 5 dw 6, 7, 8, 9, 10 dw 11, 12, 13, 14, 15 aSize dw 15 ; розмір масиву .code begin: Data ; завантаження сегменту данних ArrPrint arr, aSize ; виведення заданого масиву EndLine ; новий рядок ArrOperations arr, aSize ; виконання завдання згідно варіанту ArrPrint arr, aSize ; виведення зміненого масиву EndProgram ; завершення програми end begin Створення exe файлу й виконання програми: / Програма в турбодебагері / Програма викликана з консолі: / Висновок: ознайомлено з роботою макросів у асемблері та розроблено програму, яка виконує завдання згідно індивідуального варіанту.
Антиботан аватар за замовчуванням

06.05.2023 11:05-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!