
- •Основи програмування на мові асемблер та знайомство з програмним забезпеченням для виконання лабораторних робіт
- •Теоретичні відомості
- •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.2 Команда безумовного переходу jmp
Команда JMP здійснює безумовний перехід, тобто передачу керування за вказаною адресою при будь-яких обставинах. Зрозуміло, що при написані програми визначення точної адреси переходу - дуже складна задача, хоча при написані програм на асемблер її вирішення є можливим. Саме тому для визначення місця передачі керування в мові асемблер ефективно використовуються позначки. Визначення позначок та правила їх написання дивиться в методичних вказівках до роботи №1. Треба лише звернути увагу на те, що після позначок перед кодом команди слід ставити символ дві крапки (:) для уникнення некоректних перехресних міжмодульних посилань. Цей символ зазначує, що посилання на цю позначку можливе тільки в рамках процедури. Відсутність двох крапок у внутрішніх позначках процедури - це досить часта помилка програмістів, які не мають досвіду. Таким чином, формат команди JMP такий:
{позначка} JMP [позначка-операнд]
Позначку можна ставити як в одному рядку з кодом команди, так і окремим рядком - в обох випадках посилання буде вірним. При використанні команди JMP дуже важливо враховувати тип адресації. Розглянемо такий приклад:
M1: ADD AX,1
ADD BX,AX
SHL CX,1
JMP M1
Завдання для перевірки №1: З’ясуйте зміст кожної з команд наведеного прикладу. Опишіть алгоритм, який реалізований у ньому, за допомогою тезових формуліровок.
Щоб з’ясувати, на скільки зменшиться адреса в командному вказівнику IP після виконанні команди JMP, треба чітко розрахувати, скільки байтів в комп’ютерних кодах містить кожна з команд. Відомо, що коди команд ADD та SHL містять два байти. При асемблюванні програми транслятор автоматично підрахує необхідну величину, на яку треба зменшити число, що знаходиться в командному вказівнику після виконання команди JMP. Оскільки в наведеному прикладі це число є меншим за 127, буде використана адресація типу SHORT, яка відповідає чотирьохбайтному коду команди JMP. Старші її байти містять безпосередньо код операції, а молодші - від’ємне число, яке треба додати до числа, що знаходиться у командному вказівнику, після виконання команди JMP.
Завдання для перевірки №2: Комп’ютерний код операції безумовного переходу при найкоротшій адресації становить EBH. Напишіть повний чотирьохбайтний код команди JMP для наведеного випадку.
Таким чином, при зміщенні вгору на величину, меншу за 127 байт, транслятор асемблера автоматично генерує чотирьохбайтний код команди JMP, який відповідає найкоротшій адресації. Але якщо в програмі передбачений перехід не вгору, а вниз, то при аналізі коду команди JMP на першому проходженні програми транслятору ще «не відомо», де саме знаходиться позначка і який відповідно обрати тип адресації. Тому двопрохідний асемблер, яким є програма tasm, в цьому випадку буде по замовченню генерувати шестибайтний код команди JMP, який відповідає адресації типу NEAR. Два старші байти цього коду містять код операції, а чотири молодші - число, яке треба додати до адреси, що знаходиться в лічильнику команд. Якщо ви хочете генерувати чотирьохбайтний код команди JMP при зміщенні вниз, треба використовувати в асемблерному коді цієї команди директиву SHORT, наприклад:
JMP SHORT M1
........................................
M1: ........................................
Завдання для перевірки №3: Чи ефективно написана ваша програма для лабораторної роботи №2? Якщо ні - перепишіть її так, щоб коди команд займали менший обсяг оперативної пам’яті.