
- •Теоретичні відомості
- •1. Структура простої програми мовою асемблера. Формат кодування програми.
- •2. Основні директиви : segment , end, ends, proc, endp, assume.
- •3. Основні вимоги при створенні програми. Приклади простих програм мовою асемблера.
- •4. Трансляція програми. Опції компіляції та загальна характеристика.
- •6. Застосування програми налагодження для пошуку помилок.
- •Розв’язування задач за тематикою заняття
- •Завдання для самостійної роботи
- •Теоретичні відомості
- •1. Директиви визначення даних.
- •2. Директива повторення dup.
- •3. Сталі.
- •5. Представлення в пам’яті цілих чисел.
- •6. Команда пересилки даних mov.
- •7. Команди двійкового додавання та віднімання.
- •Команда зміни знаку операнда neg
- •8. Обчислення цілих арифметичних виразів.
- •Розв’язування задач за тематикою заняття
- •Завдання для самостійної роботи.
- •Теоретичні відомості
- •1. Команда безумовного переходу jmp. Типи адресів переходу short,near та far.
- •2. Команди організації циклів ( loop,loopn,loopnz). Команда loop. Керування циклом за ecx/cx.
- •Керування циклом за ecx/cx із врахуванням ознаки zf
- •3. Команди умовних переходів.
- •5. Команда lea
- •Команда роботи зі стеком push та pop
- •Розв’язування задач за тематикою заняття
- •Завдання для самостійної роботи.
- •Розв’язування задач за тематикою заняття
- •Завдання для самостійної роботи.
- •Логічні операції та операції зсувів.
- •2. Команди логічних операцій (and, test, or, xor, not).
- •3. Команди зсувів та циклічних зсувів.
- •Команди зсувів (sal, sar, shl,shr)
- •Команда зсуву логічного операнда вправо – shr
- •3.2 Команди циклічних зсувів (rol, ror ,rcl, rcr). Циклічний зсув операнда вліво - rol
- •Циклічний зсув операнда вправо ror
- •Циклічний зсув операнда вліво через ознаку переносу - rcl
- •Циклічний зсув операнда вправо через ознаку переносу – rcr
- •Бітові маски.
- •Розв’язування задач за тематикою заняття
- •Завдання для самостійної роботи
- •1. Множення цілих чисел
- •2. Ділення цілих чисел
- •3. Перетворення в регістрах
- •Алгоритм введення–виведення цілих чисел
- •Виведення цілих чисел.
- •Введення цілих чисел.
- •Розв’язування задач за тематикою заняття
- •Завдання для самостійної роботи.
- •Теоретичні відомості
- •Особливості команд обробки рядків.
- •Ознака df. Команди зміни ознаки ( cld, std ).
- •Префікси повторення( rep, repe, repz, repne, repze ).
- •Команди обробки символьних рядків
© Сопронюк Ф.О., Сопронюк Є.Ф. ,Лазорик В. В. Методичні рекомендації та завдання до лабораторних робіт з дисципліни “програмування” (мова асемблера). !!! документ в процесі розробки !
Лабораторна робота № 1.
Тема: Структура програми мовою асемблера. Створення та налагодження програм.
Мета. Вивчення структури програми мовою асемблера, вимог при створенні програм мовою асемблера та засобів створення та налагодження програм.
План заняття :
Структура простої програми мовою асемблера. Формат кодування програми.
Основні директиви SEGMENT , END, ENDS, PROC, ENDP, ASSUME.
Основні вимоги при створенні програми. Приклади простих програм мовою асемблера.
Приклад простої програми мовою асемблера та основні вимоги.
Трансляція програми. Опції компіляції та загальна характеристика.
Редактор зв’язків. Опції редактора зв’язків. Створення завантажувального модуля.
Застосування налагоджувача для пошуку помилок.
Теоретичні відомості
1. Структура простої програми мовою асемблера. Формат кодування програми.
Програма мовою асемблер складається з послідовності команд та директив(псевдокоманд). Формат кодування команд програми має вигляд :
[мітка: ] [префікс] команда [операнд [, операнд ] ] [ ; ]
Мітка, префікс та операнди можуть бути відсутні. Операнд – це елемент над яким виконуються дії. В якості операнда може бути стала, регістр або змінна, яка визначає елемент даних.
Область коментаря визначається з позиції, де знаходиться крапка з комою (;) до кінця поточного рядка.
При кодуванні програми кожна команда, або директива записуються в окремий рядок. Директиви керують процесом перетворення програми на мові асемблера в машинні коди та формуванням роздруку. В асемблері зарезервовані службові ключові слова (службові ідентифікатори) для позначення регістрів процесора, команд та директив.
Ідентифікатор у мові програмування асемблера складається із послідовності :
букв латинського алфавіту ( a до z та A до Z);
цифр ( 0 до 9);
спеціальних знаків;
знак запитання ( ? );
крапка ( . ), тільки як перший знак у ідентифікаторі;
комерційне ета ( @ );
знак підкреслення ( _ );
знак долар ($).
Перший знак ідентифікатора повинен бути буквою або спеціальним знаком. За замовчуванням мова асемблера в ідентифікаторах не розрізняє великі та малі букви. Для позначення сегментів, процедур, елементів даних та макросів використовуються імена. Мітки та імена визначаються, як ідентифікатори.
2. Основні директиви : segment , end, ends, proc, endp, assume.
Директиви SEGMENT і ENDS - визначають сегменти коду, даних та стеку. Загальна структура опису сегменту :
ім’я SEGMENT [ атрибути сегменту ]
........................ Тіло сегменту
ім’я ENDS
Атрибути сегменту, якщо вони присутні, визначають:
вирівнювання сегмента (на границю слова, подвійного слова, параграфа або сторінки);
комбінування та спосіб об’єднання з іншими сегментами;
клас сегменту;
розмір сегменту.
Атрибут розміру сегменту може приймати такі значення:
use16 — це означає, що сегмент допускає 16-бітний режим адресації. Сегмент може мати до 64 Кбайт коду або даних;
use32 — сегмент буде використаний 32-бітний режим адресації. Сегмент може мати до 4 Гбайт коду або даних.
Режим адресації визначає спосіб кодування машинних команд.
Директиви PROC і ENDP - визначають процедуру. Структура опису процедури (підпрограми) :
ім’я PROC [ параметри ]
............ Тіло процедури
ім’я ENDP
Процедури повинні знаходитися в межах сегмента коду. Вихід з процедури здійснюється за допомогою команди мови асемблера RET, процедура може мати декілька виходів. В дійсності в асемблері є три команди виходу RET, RET N (N – число) та RETF. Виклик процедур здійснюється за допомогою команди мови асемблера CALL.
Синтаксис виклику :
CALL ім’я _процедури
Після завершення роботи процедури керування передається наступній команді.
Директива ASSUME - вказує асемблеру з якими сегментами будуть пов’язані сегментні регістри.
Директива END використовується признак завершення коду програми мовою асемблера. Синтаксис директиви :
END [Start_adress]
де Start_adress - це необов’язковий параметр. В головному модулі програми вказує на точку, з якої починає виконуватися програма ( її називають точкою входження в програму). В інших модулях програми цей параметр відсутній. Будь-який текст, що знаходиться після директиви END ігнорується компілятором.
Директива TITLE – це заголовок програми, вміст директиви, тобто текст в після вказаного ключового слова ігнорується як коментар.