- •Основи програмування на мові асемблер та знайомство з програмним забезпеченням для виконання лабораторних робіт
- •Теоретичні відомості
- •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 Команда порівняння cmp
У теоретичній частині роботі №1 був розглянутий регістр стану процесора Intel 8086, його структура та розташування бітів. Прикладом команди, яка змінює прапори регістра стану, є команда асемблера CMP. Формат команди:
{позначка} CMP [операнд1], [операнд2]
Команда зрівнює два операнда та, не змінюючи їх, впливає на прапори AF, CF, OF, PF, SF, ZF. Як операнди можуть бути використані регістри процесора, комірки пам’яті, безпосередні дані. Тому команда CMP ефективно використовується разом з командами умовного переходу, результат виконання яких безпосередньо залежить від значень прапорів регістра стану. Саме ці команди і будуть розглядатися далі.
1.5. Команди умовного переходу в мові асемблер
Асемблер підтримує велику кількість команд умовного переходу, які здійснюють передачу керування у програмі залежно від вмісту регістра стану. Зміст головних з них: здійснити перехід на позначку-операнд, якщо результат операції нуль (або не нуль), якщо одне число більше (менше) другого, якщо результат є додатним (від’ємним), парним (непарним), якщо є (немає) перенесення.
Завдання для перевірки №6: Чи пам’ятаєте Ви, як визначається парність числа у теорії інформації та програмуванні і чим це визначення суттєво відрізняється від визначення парності в арифметиці?
Часто-густо команди умовного переходу використовуються після команди CMP. Загальний формат команд умовного переходу такий:
{позначка} [код команди] [позначка-операнд]
Аналогічно командам JMP та LOOP, комп’ютерний код команди умовного переходу містить значення відстані між кінцем команди та адресою передачі керування. Ця відстань, як і для команди LOOP, мусить відповідати межам найкоротшої адресації (тип SHORT), а при виході за ці межі транслятор видає повідомлення «Relative jump out of rang».
При розгляді команд умовного переходу слід відзначити, що використання тієї чи іншої команди залежить від типу даних, що зрівнюються. Розглядаючи у попередній роботі представлення від’ємних чисел, ми з’ясували, що від’ємні та великі додатні числа комп’ютер представляє однаково, і вся відповідальність по визначенню знака числа лежить на програмістові. Насправді, як визначити яке з чисел більше - E8H чи 15H? Результат залежить від того, як розглядати число E8H - як додатне чи як від’ємне. Тому у мові асемблер існує дві групи операцій умовного переходу - для знакових та для беззнакових даних (табл. 17, 18). У табл. 19 наведені команди для особливих арифметичних перевірок. Якщо команда допускає два різних написання, то вони наведені через символ / (прямий слеш).
Таблиця 17. Переходи для знакових даних
Мнемоніка команди |
Що виконує |
Прапори, що перевіряються |
JE / JZ |
Перехід, якщо рівно (нуль) |
ZF |
JNE / JNZ |
Перехід, якщо не рівно (не нуль) |
ZF |
JG / JNLE |
Перехід, якщо більше (не менше або рівно) |
ZF, SF, OF |
JGE / JNL |
Перехід, якщо більше або рівно (не менше) |
SF, OF |
JL / JNGE |
Перехід, якщо менше (не більше або рівно) |
SF, OF |
JLE / JNG |
Перехід, якщо менше або рівно (не більше) |
ZF, SF, OF |
Таблиця 18. Переходи для беззнакових даних
Мнемоніка команди |
Що виконує |
Прапори, що перевіряються |
JE / JZ |
Перехід, якщо рівно (нуль) |
ZF |
JNE / JNZ |
Перехід, якщо не рівно (не нуль) |
ZF |
JA / JNBE |
Перехід, якщо вище (не нижче або рівно) |
ZF, CF |
JAE / JNB |
Перехід, якщо вище або рівно (не нижче) |
CF |
JB / JNAE |
Перехід, якщо нижче (не вище або рівно) |
CF |
JBE / JNA |
Перехід, якщо нижче або рівно (не вище) |
CF, AF |
Таблиця 19. Особливі арифметичні перевірки
Мнемоніка команди |
Що виконує |
Прапори, що перевіряються |
JS |
Перехід, якщо є знак (від’ємне) |
SF |
JNS |
Перехід, якщо немає знаку (додатне) |
ZF |
JC |
Перехід, якщо є перенесення |
CF |
JNC |
Перехід, якщо немає перенесення |
CF |
JO |
Перехід, якщо є переповнення |
OF |
JNO |
Перехід, якщо немає переповнення |
OF |
JP / JPE |
Перехід, якщо паритет парний |
PF |
JNP / JPO |
Перехід, якщо паритет непарний |
PF |
Зазначимо, що команди переходу за умовою «рівно або нуль» однакові для знакових та беззнакових даних.
Оскільки регістр СХ є дуже важливим і використовується процесором як лічильник, існує окрема команда JCXZ, яка здійснює передачу керування за позначкою, якщо в регістрі CX міститься число 0. Приклад використання команд умовного та безумовного переходів та циклу:
A10: MOV SUM, CX
ADD SUM, AX
JP A11
SUB AX,CX
JMP A12
A11: ADD AX,BX
A12: CMP AX,100
JG A13;
LOOP A10
A13: NOP
RET
Завдання для перевірки №7: Опишіть алгоритм, що реалізований у наведеному прикладі, за допомогою тезових формуліровок.
Завдання для перевірки №8: Перепишіть приклад, наведений у розділі «Команда циклу LOOP» не використовуючи команду циклу, а реалізуючи циклічний процес через команди умовного та безумовного переходів. Порівняйте, яка з програм є простішою і містить менше асемблерних команд.
