Опис функціонування програми
Опис вхідних, вихідних даних
Для виводу на екран текстових повідомлень у всіх випадках використовуються функція DOS 09h.
ВХІД:
AH – регістр AH має містити 09h.
DS:DX – мають містити адрес стрічки;
Примітка: стрічка має закінчуватися символом “$”, що слугує кінцем стрічки.
Для відкриття файлу була використана функція DOS 3dh.
ВХІД:
AH – регістр AH має містити 3dh.
DS:DX – мають містити адрес стрічки ASCIIZ з назвою файлу (можна також вказувати повний шлях до файлу;
Файл відкривається в режимі читання/запис. Якщо такий файл вже існує то він буде обнулений. Якщо потрібно створити новий файл потрібно викликати функцію 5bh.
ВИХІД:
AX – код помилки або номер1файлу.
Для читання даних з файл була використана функція DOS 3Fh.
ВХІД:
AH – регістр AH має містити 3Fh.
BX – має містити номер файлу.
DS:DX – мають містити адрес буфера, який містить дані для запису.
CX – число записаних байт.
ВИХІД:
AX – код помилки;
AL – число реально записаних байт;
CX – байт даних записується у файл чи на пристрій з номером, заданим у BX. Дані беруться з буфера, що записаний у DS:DX. Дані записуються, починаючи з поточної позиції покажчика читання/запису файлу.
Для закриття відкритого файлу використовується функція DOS 3eh.
ВХІД:
AH – регістр AH має містити 3eh.
BX – номер файлу;
ВИХІД:
AX – код помилки.
Для виходу програми використалася функція DOS 4Ch.
ВХІД:
AH – регістр AH має містити 4Ch.
AL – код виходу;
ВИХІД: (не має);
При роботі з файлами дуже важливо контролювати хід виконання програми, оскільки можливі критичні операції, такі як відсутність файлу, відсутність дискети, поганий файл і т. д. Всі вищерозглянуті функції повертали коди помилок, якщо вони були. Важливо вчасно перехопити управління в разі виникнення критичної помилки і в разі необхідності вивести повідомлення і повернути управління програмі, наприклад, для повторного вводу імені файлу. В противному випадку така помилка може не тільки зруйнувати програму яка виконується, але й привести у нестабільне положення систему в цілому, викликати “зависання” комп’ютера.
Ось розшифровка кодів помилок:
Таблиця 2.1 – Розшифровка кодів помилок
№ |
ОПИС ПОМИЛКИ |
01 |
Помилка номера функції |
02 |
Файл не знайдений |
03 |
Шлях доступу не знайдений |
04 |
Відкрито дуже багато файлів |
05 |
Доступ не дозволений |
06 |
Помилка файлового номера |
07 |
Блок управління пам’яттю зруйнований |
08 |
Недостатньо пам’яті |
09 |
Помилка адреси блоку пам’яті |
10 |
Помилка обладнання |
11 |
Помилка формату |
12 |
Помилка коду доступу |
13 |
Помилка даних |
15 |
Помилка дисковода |
16 |
Спроба знищити зміст |
17 |
Не той пристрій |
18 |
Немає більше файлів |
Опис процедур і функцій
Арифметичні операції - ADD, SUB, MUL, DIV. add приймач, джерело
Виконує обчислення: приймач = приймач + джерело. Є також інші форми: приймач джерело приклад регістр регістр add ecx, edx регістр пам'ять add ecx, dword ptr [104h] / add ecx, [edx] регістр значення add eax, 102 пам'ять значення add dword ptr [401231h], 80 пам'ять регістр add dword ptr [401231h], edx Ця команда дуже проста. Вона додає значення джерела до значення приймача і поміщає результат в приймач. Інші математичні команди: sub приймач, джерело (приймач = приймач - джерело) mul множене, множник (множене = множене * множник) div дільник (eax = eax / дільник, edx = залишок)
Оскільки регістри можуть містити тільки цілочисельні значення (тобто числа, не, з плаваючою комою), результат ділення розбитий на приватне і залишок. Тепер, залежно від розміру джерела, приватне зберігається в eax, а залишок у edx: розмір джерела поділ приватне в ... залишок у ... BYTE (8-bits) ax / дільник AL AH WORD (16-bits) dx: ax * / дільник AX DX DWORD (32-bits) edx: eax * / дільник EAX EDX * = Наприклад: якщо dx = 2030h, а ax = 0040h, dx: ax = 20300040h. Dx: ax - значення dword, де dx представляє старше word, а ax - молодше. Edx: eax - значення quadword (64 біта), де старше dword в edx і молодше в eax. Джерело операції ділення може бути: 8-біт регістр (al, ah, cl, ...) 16-біт регістр (ax, dx, ...) 32-біт регістр (eax, edx, ecx ...) 8-біт значення з пам'яті (byte ptr [xxxx]) 16-біт значення з пам'яті (word ptr [xxxx]) a 32-біт значення пам'яті (dword ptr [xxxx])
Джерело не може бути безпосереднім значенням, тому що тоді процесор не зможе визначити розмір вихідного операнда. Логічні операції з битами - OR, XOR, AND, NOT.Еті команди працюють з приймачем і джерелом, виключення команда 'NOT'. Кожен біт в приймачі порівнюється з тим же самим бітом в джерелі, і в залежності від команди, 0 або 1 поміщається в біт приймача: команда AND OR XOR NOT Біт джерела 0 0 1 1 0 0 1 1 0 0 1 1 0 1 Біт приймача 0 1 0 1 0 1 0 1 0 1 0 1 X X Біт результату 0 0 0 1 0 1 1 1 0 1 1 0 1 0 AND (логічне І) встановлює біт результату в 1, якщо обидва біта, біт джерела і біт приймача встановлені в 1. OR (логічне АБО) встановлює біт результату в 1, якщо один з бітів, битий джерела або біт приймача встановлений в 1. XOR (НЕ АБО) встановлює біт результату в 1, якщо біт джерела відрізняється від біта приймача. NOT інвертує біт джерела.
ТЕСТУВАННЯ ПРОГРАМИ ТА РЕЗУЛЬТАТИ ЇЇ ВИКОНАННЯ
Результати роботи (screenshots, screen capture)
Переконатися в тому, що програма дійсно виконується можна натиснувши у програмі Volcov Comander комбінацію клавіш Alt+F5 (Memory Info). У вікні зявляться всі програми які розміщені в пам’яті, серед них можна побачити програму “1.com”, тобто кирилізатор на рис. 3.1:
Рисунок 3.1 Менеджер процесів Volcov Comander
Далі продемонструємо можливості українізації тексту, що вводиться на рис.3.2:
Рисунок 3.2 Введення тексту кирилицею