
Укладач: канд. техн. наук, доцент Кудря
Володимир Григорович
Посібник розглянуто на засіданні кафедри інформаційних систем та мереж
протокол № 2 від " "25 вересня 2008 р.
Завідуюча кафедрою ІСМ,
д.т.н., . Князева И.О.
Затверджені методичною комісією факультету інформаційних технологій
протокол № від " " 2008 р
Голова методичної комісії,
директор ФІТ ' Корнієнко Ю.К.
ЗМІСТ Передмова |
4 |
Введення |
5 |
Лабораторна робота №1. Дослідження етапів виконання |
|
асемблерної програми |
7 |
Теоретичні відомості |
7 |
Завдання |
12 |
Лабораторна робота №2. Дослідження циклічних алгоритмів |
|
для формування та виводу на екран АБО І кодованих символів |
13 |
Теоретичні відомості |
13 |
Завдання |
20 |
Лабораторна робота №3. Дослідження програмного управління |
|
курсором через вкладені асемблерні цикли |
20 |
Теоретичні відомості |
21 |
Завдання |
22 |
Лабораторна робота №4. Посимвольний ввід з клавіатури. |
|
Аналіз натискання функціональних клавіш та їх комбінацій |
24 |
Теоретичні відомості |
24 |
Завдання |
29 |
Лабораторна робота №5. Дослідження символьних рядків |
|
(паролю), що вводяться з клавіатури |
ЗО |
Теоретичні відомості |
ЗО |
Завдання |
35 |
Лабораторна робота №6. Асемблерні процедури трансляції |
|
таблиці двійкових даних в символьну форму |
37 |
Теоретичні відомості |
37 |
Завдання |
40 |
Лабораторна робота №7. Програмування на асемблері |
|
файлового сервісу |
42 |
Теоретичні відомості |
42 |
Завдання |
49 |
Передмова
Мета виконання завдань по даних лабораторних роботах — закріплення теоретичних знань курсу практичними прикладами і придбання навиків програмування на мові асемблера.
У кожній роботі розглядається один із засобів системного програмування на асемблері для IBM PC і за допомогою його вирішується яке-небудь практичне завдання. Як інструмент для виконання робіт використовується пакет TASM фірми Borland, приклади наводяться відповідно до режиму компіляції MASM даного пакету.
Виконання кожної лабораторної роботи включає наступні етапи: ознайомлення з коротким теоретичним матеріалом; вибір варіанту завдання; продумування шляхів його рішення; втілення алгоритму за допомогою блок-схеми або програми на псевдомові; побудова ключових фрагментів асемблерної програми на чернетці; повна реалізація програми на робочому місці, включаючи коментування, настройку і відладку; оформлення протоколу, шо містить завдання і текст програми; захист протоколу в зазначений термін.
Введення
Системне програмування, як правило, здійснюється на мові низького рівня. Однією з мов низького рівня є мова асемблера (асемблер). У його основі лежить безпосереднє використання команд центрального процесора для створення програм. Крім того, структура програми і процедура підготовки її до виконання наближені до архітектурних особливостей операційної системи і, таким чином, реалізують низький рівень доступу до ресурсів. В результаті системний програміст отримує якнайповніший контроль над процесами, що відбуваються як при підготовці програми до виконання, так і при ЇЇ виконанні.
Команди процесора відповідають окремим мнемонічним інструкціям мови асемблера. Більшість з них орієнтована на обробку двійкових даних, що зберігаються в регістрах усередині процесора або в елементах основної пам'яті. Відповідно до характеру обробки виділяють групи команд: пересилки, арифметичні, логічні, зрушення, передачі управління та інші. Типи оброблюваних даних частіше зв'язуються з розмірами двійкових осередків, що відводяться для їх зберігання, і рідше — з їх смисловим значенням (числа, символи, адреси, команди). Асемблер на рівні інструкцій визначення даних підтримує типи "байт", "слово" (2 байти), "подвійне слово" (4 байти) та інші. При програмуванні в реальному режимі процесора (відповідному процесору 8086) основним типом є 16-бітове слово.
Регістри процесора — його внутрішні двобайтові осередки — використовуються в основному для короткочасного зберігання оброблюваних даних невеликого розміру. Використання регістрів при обробці даних переважно у зв'язку з швидким до них доступом. Звернення до регістрів здійснюється по іменах. Найбільш вільний доступ забезпечується до регістрів загального призначення: АХ, ВХ, СХ, ОХ, БІ, 01, БР і ВР.
Для тривалого розміщення масивів даних і команд програми служить основна (оперативна) пам'ять, що є сукупністю байтових осередків. Звернення до осередків пам'яті проводиться по унікальних номерах осередків — адресах. Мова асемблера дозволяє привласнювати адресам даних і команд імена. Сучасні реалізації асемблерів (зокрема ТАБМ) дозволяють іменувати також ділянки початкового тесту програми і тому є макроасемблерами.
При зверненні до пам'яті використовуються сегменти — ділянки пам'яті з відносною 16-бітовою адресацією. Повна адреса осередку визначається у вигляді пари 16-бітових адрес: сегментної адреси, що визначає положення сегменту в пам'яті, і відносної адреси, що визначає
положення осередку усередині сегмент}'. Сегментні адреси містяться в сегментних регістрах CS, DS, ES і SS і указують відповідно на сегменти команд, даних, додаткових даних і стека. Відносні адреси указуються відповідно до режимів адресації пам'яті. У разі прямої адресації відносна адреса указується у вигляді константи, що поміщається в код машинної команди. У разі непрямої адресації відносна адреса визначається за допомогою одного або двох регістрів загального призначення (у 8086 — тільки ВХ, BP, SI або DI). Повні адреси записуються у вигляді адресних пар "сегментна регистрютносительньїй адреса". В більшості випадків сегментний регістр не указується, мається на увазі за умовчанням.
Окрім регістрів загального призначення і сегментних процесор 8086 має два спеціальні регістри: прапорів (Flags) і покажчик команд (IP). Покажчик команд завжди містить відносна адреса команди (у сегменті команд), що підлягає виконанню. Прапорами є окремі біти, які можуть бути встановлені (= 1) або скинуті (= 0), відображаючи тим самим певний стан результату деякої дії (прапори CF, AF, OF, ZF, PF, SF) або задаючи режим роботи процесора (прапори DF, IF, TF),
Лабораторна робота №1
СТРУКТУРА ЕХЕ-ПРОГРАММЫ НА АСЕМБЛЕРІ. ПІДГОТОВКА ДО ВИКОНАННЯ
Теоретичні відомості
Початковий текст програми на мові асемблера повинен зберігатися в неформатованому текстовому файлі з коротким ім'ям (до 8 латинських символів) і розширенням ASM. Для його створення або редагування зручно скористатися редактором, вбудованим у файлову оболонку.
Обробка початкового файлу здійснюється програмами асемблер і редактор зв'язків (компонувальник). У пакеті TASM ці програми реалізовані у вигляді утиліт командного рядка (консолі). У простому випадку асемблер-транслятор здійснює переклад мнемонічних команд ASM-файла в об'єктний код (файл з розширенням OBJ), а редактор зв'язків перетворить OBJ-файл в здійснимий файл (ЕХЕ або СОМ). Ці операції називаються асемблюванням (або трансляцією) і компоновкою відповідно. Після завершення роботи асемблер і компонувальник виводять на екран діагностичні повідомлення в текстовому режимі.
Кожна інструкція початкового файлу записується в окремому рядку. У загальному випадку рядок включає ідентифікатор, інструкцію, операнди інструкції і коментарі. Окремі частини рядка розділяються табуляціями, так що утворюються відповідні колонки:
ідентифікатор інструкція операкди ;
коментар
Наприклад, обнуления регістрів даних процесора може виглядати
так: