- •Основи програмування на мові асемблер та знайомство з програмним забезпеченням для виконання лабораторних робіт
- •Теоретичні відомості
- •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.4. Команди логічних операцій
Як відомо, логічні операції є важливим елементом в проектуванні цифрових електронних схем. Але двійкова логіка має також багато спільного із логікою програмування. Наприклад, всі арифметичні операції здійснюються на апаратному рівні як послідовність великого числа логічних операцій [1,4]. Крім того, команди логічних операцій знаходять широке використання для моделювання логіки роботи цифрових схем, для здійснення арифметичних операцій з кодами ASCII, для накладення масок (виділення окремих біт числа), а також для організування логіки програми. В мові програмування асемблер підтримується шість головних команд для виконання логічних операцій: AND, OR, XOR, NOT та TEST.
Ці команди обробляють один байт або одне слово в регістрі або в комірці пам’яті. Встановлюють прапори: CF (прапор переносу), OF (прапор переповнення), PF (прапор парності), SF (прапор знака), ZF (прапор нуля). Працюють команди логічних операцій наступним чином:
AND - якщо обидва біта, що зрівнюються, дорівнюють 1, то результат дорівнює 1, а в іншому випадку 0 (команду AND називають також логічним множенням).
OR - якщо хоча б один з бітів, що зрівнюється, дорівнює 1, то результат теж дорівнює 1, а в іншому випадку 0 (команду OR називають також логічним діленням).
XOR - якщо біти, що зрівнюються, співпадають, то результат дорівнює 0, а якщо різняться - 1.
NOT - команда має один операнд та здійснює інверсію всіх бітів числа.
TEST - працює як команда AND, але тільки змінює прапори стану, не впливаючи на результат. Може бути використана для перевірки окремих байтів числа на наявність одиниць.
Приклади виконання логічних команд наведені в табл. 13:
Таблиця 13. Приклади виконання логічних команд
Команда |
AND |
OR |
XOR |
NOT |
Перше число |
10100101 |
10100101 |
10100101 |
10100101 |
Друге число |
10010011 |
10010011 |
10010011 |
- |
Результат |
10000001 |
10110111 |
00110110 |
01011010 |
Формат логічних команд такий же самий, як і арифметичних:
{позначка} [код команди] [операнд-приймач], [операнд-джерело]
Завдання для перевірки №8: Наведіть свої приклади логічних команд. Напишіть на мові асемблера фрагмент програми, який містить логічні команди, та визначте, яким буде результат виконання цього фрагменту програми. Результат роботи покажіть викладачеві.
1.5. Команди зсуву бітів числа
В мові асемблер існує чотири команди зсуву бітів - SAR, SAL, SHR та SHL. Зсув може здійснюватись праворуч або ліворуч на 8 позицій для байта або на 16 для слова. Команда містить 2 операнди - регістр або комірку пам’яті, де міститься байт або слово, які треба обробити, та вказівник на кількість позицій зсуву. Зсув на одну позицію може бути вказаний безпосередньо, а для зсуву на дві позиції або більше треба вказати кількість позицій у регістрі CL.
Таким чином, формат команд зсуву у мові програмування асемблер такий:
{позначка} [код команди] [операнд1], [операнд2]
На відміну від попередніх команд з двома операндами тут перший операнд є водночас і джерелом, і приймачем, тобто число, над яким проводиться зсув, змінюється безпосередньо у тій комірці пам’яті або регістрі, куди воно було завантажене. Зрозуміло, що само число при такий операції втрачається. Другим операндом команди зсуву може бути або безпосередньо число 1, або регістр CL.
Команда SHR визначає логічний зсув праворуч без урахування знака, а команда SAR - арифметичний зсув праворуч з урахуванням знака. Ризниця між цими командами полягає у тому, що для заповнення старшого байта при виконанні команди SHR використовується нуль, а в команді SAR - біт знака.
Приклади використання команд SAR та SHR наведені у таблиці 14.
Таблиця 14. Приклади використання команд арифметичного та логічного зсуву
Приклад 1 |
Приклад 2 |
||
Асемблерна команда |
Результат її виконання |
Асемблерна команда |
Результат її виконання |
MOV CL,3 MOV AX,10110111B SHR AX,1 SHR AX,CL |
CL=3 AX=10110111B AX=01011011B AX=00001011B |
MOV CL,3 MOV AX,10110111B SAR AX,1 SAR AX,CL |
CL=3 AX=10110111B AX=11011011B AX=11111011B |
Оскільки при зсуві ліворуч молодші біти числа завжди замінюються нулями, результат виконання команд SAL та SHL завжди буде однаковим.
Важливим при виконанні команд арифметичного та логічного зсуву є те, що біт, який звільнюється, переходить до прапору перенесення. Це дає можливість ефективно використовувати ці команди для множення та ділення чисел на два.
Завдання для перевірки №9: Напишіть фрагмент асемблерної програми з використанням команди SHL та проаналізуйте результат їх виконання таким же чином, як це зроблено у наведеному прикладі для команд SAR та SHR.
Завдання для перевірки №10: Покажіть, що команди зсуву можуть бути використані для множення або ділення числа на два.
