- •Основи програмування на мові асемблер та знайомство з програмним забезпеченням для виконання лабораторних робіт
- •Теоретичні відомості
- •1.1 Особливості архітектури мікропроцесора типу Intel 80х86
- •Головні регістри мп Intel 8086 та їх призначення
- •1.2 Організація обчислень та узагальнена архітектура комп’ютера ibm pc
- •1.3 Основи програмування на мові асемблер та її синтаксис. Позначки, коди команд, операнди та директиви
- •1.4. Перетворення програми з тексту на мові асемблера у виконуваний модуль
- •1.5. Основи роботи з програмою afd
- •1.6. Основи роботи з програмою td
- •2. Порядок виконання роботи
- •4. Контрольні питання:
- •Сегментація програми. Сегменти коду, даних та стеку. Їх розташування в пам’яті еом. Директиви мови асемблера segment та ends.
- •Арифметичні та логічні операції мови асемблер
- •1. Теоретичні відомості
- •Директиви визначення даних
- •1.2. Команда перенесення даних
- •1.3. Арифметичні операції над двійковими числами
- •1.4. Команди логічних операцій
- •1.5. Команди зсуву бітів числа
- •1.6. Команди циклічного зсуву бітів числа
- •1.7. Структура асемблерних програм для com- та exe-модулів. Виклик процедур та стек
- •Таким чином, структура com-програми повинна бути такою:
- •2. Варіанти індивідуальні завдання для лабораторної роботи
- •3. Порядок виконання роботи
- •5. Контрольні питання
- •Структура програми на мові асемблер. Команди вітвлення та циклу
- •1. Теоретичні відомості
- •1.1 Механізми передачі керування та зміна послідовності виконання команд. Їх реалізація у мові асемблера. Типи адресації
- •1.2 Команда безумовного переходу jmp
- •1.3 Команда циклу loop
- •1.4 Команда порівняння cmp
- •1.5. Команди умовного переходу в мові асемблер
- •2. Варіанти індивідуальних завдань
- •3. Порядок виконання роботи
- •Виведення даних на монітор персонального комп’ютера
- •1. Теоретичні відомості
- •1.1. Представлення арифметичних та рядкових даних. Формати ascii та bcd. Команди корекції
- •1.2. Команди обробки рядкових даних мови асемблера
- •1.3. Переведення ascii-формату у двійковий формат та навпаки
- •Починаючи з молодшого байту обробляти число у лівому напрямку.
- •Вилучати трійки з шістнадцятирічних цифр кожного ascii-байту.
- •Множити отримані цифри на ваговий коефіцієнт кожного з розрядів та складати результати.
- •1.4. Введення та виведення даних в мові асемблера
- •1.5. Реалізація екранних операцій у мові програмування асемблер
- •2. Індивідуальні завдання для виконання лабораторної роботи №4
- •3. Порядок виконання роботи
- •5. Контрольні питання
- •Перелік рекомендованої літератури
- •Додаток 1 загальні вимоги до оформлення протоколів лабораторних робіт
- •Додаток 2 головні функції перериваннь bios та операційної системи ms-dos д2.1 переривання bios
- •Int 05h. Друк екрану.
- •Int 10h. Керування монітором (більш досконало функції переривання 10н описані у теоретичних відомостях до лабораторної роботи №4).
- •Int 11h. Запит списку приєднаного обладнання.
- •Д2.2 переривання ms-dos
- •Д2.3 головні функції перивання ms-dos int 21н
- •Додаток 3
1.3 Команда циклу loop
Наведений у попередньому розділі фрагмент програми не може бути робочім прикладом, оскільки він реалізує «вічний цикл». Але у робочих програмах часто-густо треба реалізовувати цикли, які повторюються певне число раз. Для реалізації таких циклів може бути ефективно використана команда LOOP, яка використовує значення регістра CX, автоматично зменшуючи його на 1 після кожного проходу всіх команд циклу. Формат команди циклу ідентичний формату команди JMP:
{позначка} LOOP [позначка-операнд]
Керування передається за адресою, яка вказана в операнді, доки значення регістра CX не дорівнює нулю, а при виконанні цієї умови здійснюється перехід на команду, що стоїть безпосередньо після оператора LOOP. При реалізації циклів часто-густо використовуються двобайтні команди збільшення та зменшення на 1, які є більш ефективними, ніж добре знайомі вам команди ADD та SUB. Формат команд збільшення на 1 INC та зменшення DEC такий:
{позначка} [код команди] [операнд]
Операндом в командах INC та DEC може бути регістр або комірка пам’яті.
Приклад використання команди LOOP:
MOV AX,1; ініциалізація регістрів процесора
MOV BX,1
MOV DX,1
MOV CX,10
M1: INC AX
ADD BX,AX
SHL DX,1
LOOP M1; Зменшити СХ на 1. Якщо в регістрі СХ число 0 - ; перейти до виконання наступної команди, якщо ні ; перейти до позначки М1.
RET; Завершити програму.
Завдання для перевірки №4: Порівняйте цей приклад з наведеним у попередньому розділі. Яку принципову різницю ви помітили? Скільки разів буде виконуватись цикл у наведеному прикладі? Проаналізуйте без допомоги комп’ютера, які числа будуть в кожному з регістрів процесора після виконання команд циклу один, два, три, десять разів.
Аналогічно команді JMP команда LOOP визначає відстань до кінця циклу. Але при реалізації циклів є два принципових правила, які повинні завжди виконуватись:
1. Позначка, на яку здійснюється перехід, завжди мусить стояти у програмі вище команди циклу.
2. В циклах передбачена тільки найкоротша адресація. Тому якщо зміщення буде перевищувати 127 байт, то такий цикл буде розглянутий як помилка програмування. Транслятор в такому випадку видасть повідомлення «Relative jump out of rang» (Перевищення відносної межі переходу, яка допускається).
Існують також дві додаткові реалізації команди LOOP - це LOOPE (або LOOPZ) та LOOPNE (або LOOPNZ). Ці команди дозволяють аналізувати не тільки стан регістру CX, але й результат виконання останньої операції циклу. Передача керування за адресою позначки-операнда командою LOOPE здійснюється тоді, коли регістр CX має ненульове значення та встановлений прапор нуля (результат виконання останньої операції циклу був 0). Аналогічно команда LOOPNE передає керування за адресою позначки-операнда, коли регістр CX має ненульове значення та не встановлений прапор нуля (результат виконання останньої операції циклу не був 0).
Завдання для перевірки №5: Замініть у наведеному прикладі команду LOOP командою LOOPNE та перевірте, чи впливає ця зміна на кількість виконань команд циклу.
