- •Основи програмування на мові асемблер та знайомство з програмним забезпеченням для виконання лабораторних робіт
- •Теоретичні відомості
- •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. Переведення ascii-формату у двійковий формат та навпаки
Як було відмічено, використання арифметичних дій над числами у ASCII-форматі не є ефективним при обробці даних великої довжини, а логічні операції над ними взагалі неможливі. На практиці простіше проводити перетворення чисел з ASCII-формату до двійкового та навпаки.
Метод перетворення з формату ASCII до двійкового досить простий. Він базується на отриманні самих цифр з їх ASCII-кодів та множенні їх на ваговий коефіцієнт кожного розряду. Алгоритм процедури перетворення такий:
Починаючи з молодшого байту обробляти число у лівому напрямку.
Вилучати трійки з шістнадцятирічних цифр кожного ascii-байту.
Множити отримані цифри на ваговий коефіцієнт кожного з розрядів та складати результати.
Наприклад, для числа 1234:
Операція |
Десятковий результат |
Шістнадцятирічний результат |
41 |
4 |
4 |
310 |
30 |
1E |
2100 |
200 |
C8 |
11000 |
1000 |
3E8 |
Результат |
1234 |
04D2 |
Завдання для перевірки №8: Напишіть асемблерну програму для переводу десяткових чисел, що представлені у форматі ASCII, у двійковий формат.
Переведення чисел з формату ASCII до двійкового формату використовується після введення даних для ефективного проведення над ними арифметичних та логічних операцій.
Перетворення чисел з двійкового формату до формату ASCII здійснюється у зворотному порядку. Насамперед треба перевести число, що міститься у регістрі процесора або у комірці пам’яті комп’ютера, з двійкової до десяткової системи числення за відповідним алгоритмом. При реалізації найпростішого з них замість переведення здійснюється ділення числа на 10 (AH). Ділення проводиться, доки остача не стане меншою за 10. Остачі, які отримуються після кожного ділення, створюють послідовність вірних цифр у десятковому форматі та заповнюють молодші розряди числа. Старший розряд числа заповнює остання частка.
Наприклад, для числа 1234 (4D2H), цей алгоритм реалізується таким чином (рис. 6):
|
Операція |
Частка |
Остача |
|
|
4D2/A |
7B Розряди |
4 |
|
|
7B/A |
C числа |
3 |
|
|
C |
1 |
2 |
Рис. 6 Реалізація алгоритму переведення чисел з двійкового до десяткового формату.
Завдання для перевірки №9: Доведіть, що запропанова ний алгоритм переведення чисел з шістнадцятирічної до десяткової системи є дійсно коректним.
Асемблерна процедура для перетворення чисел двійкового формату до формату ASCII може бути реалізована так:
C_10_TO_ASCII PROC
MOV CX,10
LEA DI, ASCVAL+4
MOV AX, BINVAL
C20: CMP AX, 10
JB c30
XOR DX,DX
DIV CX
OR DL,30H
Mov [DI],dl
DEC DI
JMP C20
C30: OR AL, 30H
Stosb
ret
C_10_TO_ASCII ENDP
Переведення чисел з двійкового до ASCII-формату ефективно використовується при виведенні остаточних результатів розрахунків на екран монітору.
При виведенні даних у шістнадцятирічній системі числення алгоритм перетворення значно простіший. Це пов’язано з тим, що ділення числа на 16 можна реалізувати через команду логічного зсуву праворуч SHR. Виділення окремих чотирьох бітів двійкового числа можна зробити за допомогою команди асемблеру AND (програмісти називають таку операцію «накладанням маски або маскуванням»). Відповідну процедуру можна записати так:
C_16_TO_ASCII PROC
STD
MOV CL,4
LEA DI,ASCVAL+3
MOV BX,BINVAL
M3: MOV AX,BX
AND AX,1111B
CMP AX,9
JG M1
OR AX,30H
JMP M2
M1: ADD AX,37H
M2: STOSB
SHR BX,Cl
JNZ M3
RET
C_16_TO_ASCII ENDP
Завдання для перевірки №10: Поясніть призначення кожної з команд наведених програм. Доведіть, що ці програми будуть коректно працювати.
