
- •Методичні вказівки
- •Прикладна архітектура процессора 8086(8088)
- •1.1. Теоретичні відомості.
- •Регістри процесора 8088(8086)
- •Порядок виконання роботи
- •Лабораторні роботи на мові Асемблер
- •Лабораторна робота n 1_1 Перша програма на Асемблері
- •Короткі теоретичні відомості
- •Варіанти завдань
- •Лабораторна робота №1_2. Трансляція, компонування і налагодження програми.
- •Лабораторна робота n 2. Com-файли.
- •Лабораторна робота n 3. Визначення даних.
- •Директива equ.
- •Варіанти завдань
- •Лабораторна робота n4. Організація процесів, що розгалужуються
- •Лабораторна робота n5. Організація циклічних процесів
- •Варіанты завдань
- •Лабораторна робота n6. Переривання
- •Лабораторна робота n7. Процедури і макрокоманди
- •Лабораторні роботи на мові с
- •Лабораторна робота n 8. Робота з символьними рядками
- •1. Мета роботи
- •2. Теми для попереднього вивчення
- •3. Постановка задачі
- •5. Приклад рішення задачі
- •5.1. Індивідуальне завдання:
- •5.2. Опис методу рішення
- •5.3. Опис логічної структури
- •5.4. Дані для тестування
- •5.5. Текст програми
- •Лабораторна робота n9. Представлення у памяті масивів і матриць
- •5. Індивідуальні завдання
- •6. Приклад вирішення задачі
- •6.1. Індивідуальне завдання:
- •6.2. Опис методів рішення
- •6.2.1. Представлення в пам'яті
- •6.2.2. Модульна структура програмного виробу
- •6.3. Опис логічної структури
- •6.3.1. Загальні перемінні
- •6.3.2. Функція creat_matr
- •6.3.3. Функція close_matr
- •6.3.4. Функція read_matr
- •6.3.5. Функція wrіte_matr
- •6.3.6. Функція ch_coord
- •6.3.7. Функція lіn
- •6.4. Програма користувача
- •6.5. Тексти програмних модулів
- •Лабораторна робота n 10. Структури і зв'язні списки
- •1. Мета роботи
- •2. Теми для попереднього вивчення
- •3. Постановка задачі
- •3. Варіанти індивідуальних завдань
- •6. Приклад вирішення задачі
- •6.1. Індивідуальне завдання:
- •6.2. Опис методів рішення
- •6.2.1. Представлення в пам'яті
- •6.2.2. Модульна структура програмного виробу
- •6.3. Опис логічної структури
- •6.3.1. Загальні перемінні
- •6.3.2.Функція maіn
- •6.4. Текст програми
- •Лабораторна робота n11. Перевірка устаткування
- •5.2. Структура програми
- •5.3. Опис змінних
- •5.4. Опис алгоритму програми
- •5.5. Текст програми
- •5.6. Результати роботи програми
- •Лабораторна робота n12. Керування клавіатурою
- •5.Індивідуальні завдання
- •5. Приклад вирішення задачі
- •5.2.3. Опис алгоритму програми
- •5.3. Текст програми
- •5.4. Результати роботи програми
- •Лабораторна робота n13 Керування таймером
- •1. Мета роботи
- •2. Теми для попереднього вивчення
- •3. Постановка задачі
- •4. Порядок виконання
- •5. Індивідуальні завдання
- •6. Приклад вирішення задачі
- •6.4.3. Опис алгоритму програми
- •6.5. Текст програми
- •6.6. Результати роботи програми
- •Лабораторна робота n14. Керування відеоадаптером
- •1. Мета роботи
- •2. Теми для попереднього вивчення
- •3. Постановка задачі
- •4. Порядок виконання
- •5. Приклад рішення задачі
- •5.1. Індивідуальне завдання.
- •5.4. Розробка алгоритм рішення
- •5.4.1. Структура програми
- •5.4.2. Опис перемінних
- •5.4.3. Опис алгоритму програми
- •5.5. Текст програми
- •5.6. Результати роботи програми
- •Лабораторна робота n15 Головний завантажувальний запис
- •4. Порядок виконання
- •5. Приклад рішення задачі
- •5.1.2. Опис змінних
- •5.1.3. Опис алгоритму програми
- •5.2. Текст програми
- •5.3. Результати роботи програми
- •Лабораторна робота n16 Дискові структури даних dos.
- •5.1.2. Опис змінних
- •5.1.3. Опис алгоритм програми
- •5.2. Текст програми
- •5.3. Результати роботи програми
- •Рекомендована_література
- •Додаток 1. Перелік тем лабораторних занять з дисципліни «Операційні системи»
Порядок виконання роботи
Для виконання усіх лаборараторних робіт пропонується єдиний порядок, що передбачає наступні кроки.
1. Ознайомитися з постановкою задачі і вихідних даних. Визначити варіант індивідуального завдання.
2. Сконструювати структуру програми.
3. Скласти і набрати текст програми і затвердити його у викладача.
4. Пункти 1 - 3 повинні бути виконані попередньо, до проведення даної лабораторної роботи.
5. Виконати компіляцію програми.
6. Провести аналіз і виправлення виявлених синтаксичних помилок у тексті програми і повторити пункти 5 і 6. При усуненні всіх синтаксичних помилок перейти до виконання пункту 7.
7. Одержати рішення (зображення) і, у випадку виявлення логічних помилок, визначити й усунути їх. Продемонструвати викладачу остаточний варіант програми і її роботу.
Зміст звіту
Звіт оформляється по кожній лаборараторній роботі і складається з наступних розділів.
Номер та тема лаборараторної роботи;
Автор (ф.і.п. студента, факультет, спеціальність, група);
Мета роботи;
Індивідуальне завдання;
Опис структур даних і алгоритмів;
Текст програми;
Результати роботи програми (вихідні дані та результати у вигляді копій екрану).
Інтерпретація результатів.
Лабораторні роботи на мові Асемблер
Лабораторна робота n 1_1 Перша програма на Асемблері
Мета роботи: ознайомитися з основними вимогами до програм мовою Асемблера.
Короткі теоретичні відомості
Першим етапом створення програми є написання текстового файлу на мові Асемблер. Цей файл створюється будь-яким текстовим редактором.
Надалі цей текстовий файл буде оброблений спеціальною програмою- транслятором для перетворення в машинний код.
У цій і наступних лабораторних роботах наведені правила написання програм мовою Асемблера фірми Mіcrosoft - MASM.
Програма, написана мовою Асемблера, складається з рядків. Максимальна довжина рядка - 132 символу. Реально використовується 80 (ширина екрана). Рядки відокремлюються друг від друга символом повернення каретки (Enter).
Основний формат рядка.
[мітка] команда [операнд][,операнд] [;коментарий]
Мітка (якщо є), команда і перший операнд розділяються принаймні одним пробілом чи символом табуляції.
МІТКА - це мнемонічне ім'я, що позначає даний рядок для наступного звертання. Мітка може містити до 31 символу. Припустимі символи:
букви: від A до Z і від a до z;
цифри: від 0 до 9;
спеціальні символи: знак питання (?),
крапка (.) - тільки перший символ,
амперсенд (@),
підкреслення (_),
долар ($).
Першим символом у мітці повинна бути буква чи спеціальний символ. Асемблер не робить розходження між заголовними і малими літерами.
Імена регістрів зарезервовані. Їх допускається використовувати тільки для позначення регістрів.
КОМАНДА (оператор) позначає дію, що повинний зробити чи процесор транслятор з мови Асемблер. Як команди можуть використовуватися команди процесора (власне команди) і директиви (псевдокоманди) Асемблеру.
ОПЕРАНД визначає елемент, над яким робить дія команда.
Команда може мати один чи два операнда чи не мати їх зовсім.
RET - команда без операнда;
ІNC CX - команда з одним операндом;
ADD AX,12 - команда з двома операндами.
Якщо команда має два операнда, вони розділяються коми (,). При використанні двох операндов першим вказується операнд-приемник, другим - операнд-источник. Тобто результат операції заноситься в перший операнд.
Приклади операндов
MOV AX,BX ;перслать уміст BX у AX
MOW AX,WORDA ;переслати вміст комірки пам'яті під ім'ям WORDA у AX
MOV AX,[BX] ;перслать уміст пам'яті за адресою зазначеному в BX у AX
MOV AX,25 ;перслать число 25 у регістр AX
MOV AX,[25] ;переслати вміст комірки пам'яті зі зсувом 25 у AX
КОМЕНТАРИЙ починається з крапки з коми (;). Може займати весь чи рядок випливати за командою в тім же рядку.
Коментарий з'являється тільки в листингах і не приводять до генерації машинних кодів. У коментарии допускаються будь-які символи основної клавіатури.
ДИРЕКТИВИ (чи псевдокоманди).
Це ряд операторів, що дозволяють керувати процесом трансляції і формування листинга. Вони діють тольков процесі трансляції і не генерують машинних кодів.
Директива SEGMENT. Використовується для опису використовуваних у програмі сегментів. Будь-яка програма містить принаймні один сегмент - сегмент коду. Може бути присутнім також сегмент стека і сегмент даних, а також додатковий сегмент. Формат директиви:
Ім'я Директива Операнд
ім'я SEGMENT [парметры]
. .
.
ім'я ENDS
Ім'я сегмента повинне обов'язково бути присутнім, бути унікальним і відповідати угодам для імен в Асемблере. Директива ENDS означає кінець сегмента. Обидві директиви SEGMENT і ENDS повинні мати однакові імена. Директива SEGMENT може містити три типи параметрів: вирівнювання, об'єднання і клас.
Вирівнювання. Даний параметр визначає границю початку сегмента. Звичайним значенням є PARA, по якому сегмент установлюється на границю параграфа. У випадку відсутності цього опреанда за замовчуванням приймається PARA.
Об'єднання. Цей параметр визначає, чи поєднується даний сегмент з іншими сегментами в процесі компонування.
Можливі наступні типи об'єднань: STACK, COMMON, PUBLІС, AT-вираження і MEMORY.
Якщо програма не повинна поєднуватися з іншими програмами, то указівка цих типів може бути опущена.
Клас. Даний елемент, укладений в апострофи, використовується для групування сегментів при компонуванні.
Сегмент стека визначається в такий спосіб:
ім'я SEGMENT PARA STACK 'Stack'
DB 30 DUP(?)
ім'я ENDS
Директива PROC. Сегмент коду містить виконувані команди програми. Він може містити в собі одну чи кілька процедур, які починаються директивою PROC. Сегмент, що містить тільки одну процедуру має вид:
ім'я -сегмента SEGMENT PARA
ім'я -процедури PROC FAR Сегмент коду з однією процедурою
.
.
RET
ім'я процедури ENDP
ім'я сегмента ENDS
Ім'я процедури повинне обов'язково бути присутнім, бути унікальним і відповідати угодам по іменах в Асемблері. Опертор FAR указує завантажувачу DOS, що початок даної процедури є крапкою входу для виконання програми. Сегмент може мати кілька процедур. Кожна процедура повинна закінчуватися директивою RET.
Директива ASSUME. Процесор використовує регістр SS для адресації стека, регістр DS - для адресації сегмента даних і регістр CS - для адресації сегмента коду. Асемблеру необхідно повідомити призначення кожного сегмента.
Директива Операнд
ASSUME SS: ім'я _стека,DS: ім'я _даних,CS: ім'я_код
де ім'я _стека, ім'я_даних, ім'я _код - імена відповідно сегментів стека, даних і коду, привласнені їм директивою SEGMENT.
Операнды можуть записуватися в будь-якій послідовності. Регістр ES також може бути присутнім серед операндов. Якщо програма не використовує регістр ES, то його можна чи опустити вказати ES:NOTHІNG.
Директива END. Цілком завершує всю програму.
Директива Операнд
END [ім'я процедури]
ІНІЦІАЛІЗАЦІЯ ПРОГРАМИ.
Система DOS має чотири вимоги для ініціалізації асемблерної EXE-програми.
1. Необхідно вказати Асемблеру, які сегментні регістри відповідають сегментам (здійснюється директивою ASSUME).
2. Потрібно зберегти в стеку адресу, що знаходиться в регістрі DS, коли програма починає виконання.
Завантажувальному модулю в оперативній пам'яті безпосередньо передує 256-байтовая (100Н) область, яка називається префіксом програмного сегмента (PSP). Програма завантажника використовує регістр DS для установки адреси початкової крапки PSP.
Користувальницька програма повинна зберегти цю адресу, помістивши її в стек. Пізніше команда RET візьме цю адресу зі стека для повернення в DOS.
3. Необхідно записати в стек нульову адресу.
4. Необхідно завантажити в DS адресу сегмента даних.
Завантажувач DOS встановлює правильні адреси стека в регістрі SS і сегмента кодів у регістрі CS. Оскільки програма з авантажувача використовує регістр DS для інших цілей, необхідно ініціалізувати регістр DS.
Вихід із програми і повернення в DOS зводиться до використання команди RET.
Команда RET забезпечує вихід з користувальницької програми і повернення в OS, використовуючи для цю адресу, записана в стек на початку програми з регістра DS. Іншим часто використовуваним способом завершення програми є команда ІNT 20H.
Приклад програми.
SEGST SEGMENT PARA STACK 'Stack'
DB 30 DUP(?)
SEGST ENDS
;
SEGDT SEGMENT PARA 'DATA'
DB 12 DUP(?)
SEGDT ENDS
;
SEGCOD SEGMENT PARA 'CODE'
ASSUME CS:SEGCOD,SS:SEGST,DS:SEGDT
BEGІ PROC FAR
PUSH DS ;зберегти вміст DS у стеці
SUB AX,AX ;обнулить регістр AX
PUSH AX ;занести вміст AX у стек
MOV AX,SEGDT ;занести адресу початку сегмента даних у регістр AX
MOV DS,AX ;занести вміст AX у регістр DS
SUB BX,BX ;обнулить регістр BX-
ADD BX,10 ;додати до вмісту BX 10
MOV CX,20 ;занести в CX 20
ADD BX,CX ;додати CX до BX
SUB BX,CX ;відняти CX з BX
RET
BEGІ ENDP
SEGCOD ENDS
END BEGІ
ПІДГОТОВКА ДО РОБОТИ
1. Вивчити короткі теоретичні відомості і рекомендовану літературу.
2. Підготувати програму у відповідності із своїм варіантом.
РОБОЧЕ ЗАВДАННЯ
Набити текст підготовленої програми, використовуючи будь-який текстовий редактор, наприклад, редактор Norton Commander.
ВИМОГА ДО ЗВІТУ
У звіті зафіксувати текст файлу з підготовленою програмою.
КОНТРОЛЬНІ ПИТАННЯ
1. Приведіть формат рядка мови Асемблер.
2. Що буде знаходитися в регістрах AX і BX після виконання наступних команд:
MOV AX, 20
MOV BX, 10
ADD AX, BX
3. Перелічіть вимоги для ініціалізації EXE-програми.