- •Методичні вказівки
- •Київ 2010 зміст
- •Прикладна архітектура процессора 8086(8088)
- •1.1. Теоретичні відомості.
- •Регістри процесора 8088(8086)
- •Порядок виконання роботи
- •Зміст звіту
- •Лабораторні роботи на мові Асемблер
- •Лабораторна робота n 1_1 Перша програма на Асемблері
- •Короткі теоретичні відомості
- •Варіанти завдань
- •Лабораторна робота №1_2. Трансляція, компонування і налагодження програми.
- •Лабораторна робота n 2. Com-файли.
- •Лабораторна робота n 3. Визначення даних.
- •Директива equ.
- •Варіанти завдань
- •3.Визначенняподвійногослова:
- •Лабораторна робота n5. Організація циклічних процесів
- •Варіанты завдань
- •Лабораторна робота n6. Переривання
- •Лабораторна робота n7. Процедури і макрокоманди
- •Лабораторні роботи на мові с
- •Лабораторна робота n 8. Робота з символьними рядками
- •5. Приклад рішення задачі
- •5.1. Індивідуальне завдання:
- •5.2. Опис методу рішення
- •5.3. Опис логічної структури
- •5.4. Дані для тестування
- •5.5. Текст програми
- •Лабораторна робота n9. Представлення у памяті масивів і матриць
- •6. Приклад вирішення задачі
- •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.3.3.Функція друку списку
- •Лабораторна робота n11. Перевірка устаткування
- •5.2. Структура програми
- •5.3. Опис змінних
- •5.4. Опис алгоритму програми
- •5.5. Текст програми
- •5.6. Результати роботи програми
- •Лабораторна робота n12. Керування клавіатурою
- •5. Приклад вирішення задачі
- •5.2.3. Опис алгоритму програми
- •5.3. Текст програми
- •5.4. Результати роботи програми
- •6. Приклад вирішення задачі
- •6.4.3. Опис алгоритму програми
- •6.5. Текст програми
- •6.6. Результати роботи програми
- •4. Порядок виконання
- •5. Приклад рішення задачі
- •5.1. Індивідуальне завдання.
- •5.4. Розробка алгоритм рішення
- •5.4.1. Структура програми
- •5.4.2. Опис перемінних
- •5.4.3. Опис алгоритму програми
- •5.5. Текст програми
- •5.6. Результати роботи програми
- •5.1.3. Опис алгоритму програми
- •5.2. Текст програми
- •5.3. Результати роботи програми
- •Лабораторна робота n16 Дискові структури даних dos.
- •5.1.2. Опис змінних
- •5.1.3. Опис алгоритм програми
- •5.2. Текст програми
- •5.3. Результати роботи програми
- •Рекомендована_література
- •Додаток 1. Перелік тем лабораторних занять з дисципліни «Операційні системи»
6. Приклад вирішення задачі
6.1. Індивідуальне завдання:
матриця містить нулі нижче головної діагоналі;
індексація починається з 0.
6.2. Опис методів рішення
6.2.1. Представлення в пам'яті
Ощадливе використання пам'яті передбачає, що для тих елементів матриці, у яких напевно містяться нулі, пам'ять виділятися не буде. Оскільки при цьому порушується двовимірна структура матриці, вона може бути представлена в пам'яті як одномірний масив, але при звертанні до елементів матриці користувач має можливість звертатися до елемента по двох індексах.
6.2.2. Модульна структура програмного виробу
Програмний виріб повинний бути окремим модулем, файл LAB2.C, у якому повинні розміщатися як дані (матриця і допоміжна інформація), так і функції, що забезпечують доступ. Зовнішній доступ до програм і даних модуля можливий тільки через виклик функцій читання і записи елементів матриці. Доступні ззовні елементи програмного модуля повинні бути описані в окремому файлі LAB2.H, що може включатися в програму користувача оператором препроцесора:
#іnclude "lab2.h"
Користувачу повинний поставлятися результат компіляції - файл LAB2.OBJ і файл LAB2.H.
6.2.3. Перетворення 2-компонентної адреси елемента матриці, що задає користувач, у 1-компонентну повинно виконуватися окремою функцією (так називаної, функцією лінеаризації), виклик якої можливий тільки з функцій модуля. Можливі три методи перетворення адреси:
при створенні матриці для неї створюється також і дескриптор D[N] - окремий масив, кожен елемент якого відповідає одному рядку матриці; дескриптор заповнюється значеннями, підібраними так, щоб: n = D[x] + y, де x, y - координати користувача (рядок, стовпець), n - лінійна координата;
лінійна координата підраховується методом ітерації як сума корисних довжин усіх рядків, що передують рядку x, і до неї додається зсув y-го корисного елемента відносно початку рядка;
для перетворення підбирається єдине арифметичне вираження, який реалізує функцію: n = f(x,y).
Перший варіант забезпечує найшвидший доступ до елемента матриці, тому що вимагає найменших розрахунків при кожнім доступі, але плата за це - додаткові витрати пам'яті на дескриптор. Другий варіант - найгірший за всіма показниками, тому що кожен доступ вимагає виконання оператора циклу, а це і повільно, і займає пам'ять. Третій варіант може бути компромісом, він не вимагає додаткової пам'яті і працює швидше, ніж другий. Але вирази для лінеаризації отут буде складніше, ніж першому варіанті, отже, і обчислюватися буде повільніше.
У програмному прикладі, що ми приводимо нижче, цілком реалізований саме третій варіант, але далі ми показуємо й істотні фрагменти програмного коду для реалізації і двох інших.
6.3. Опис логічної структури
6.3.1. Загальні перемінні
У файлі LAB2.C описані такі статичні перемінні:
іnt NN - розмірність матриці;
іnt SІZE - кількість ненульових елементів у матриці;
іnt *m_addr - адреса стиснутої матриці в пам'яті, початкове значення цієї перемінний - NULL - ознака того, що пам'ять не виділена;
іnt L2_RESULT - загальний прапор помилки, якщо після виконання будь-якої функції він дорівнює -1, то відбулася помилка.
Перемінні SІZE і m_addr описані поза функціями з квалификатором statіc, це означає, що смороду доступні для усіх функцій у цьому модулі, але недоступні для зовнішніх модулів. Перемінна L2_RESULT також описана поза усіма функціями, не без явного квалификатора. Ця перемінна доступна не тільки для цього модуля, але і для всіх зовнішніх модулів, якщо вона в них буде описана з квалификатором extern. Такий опис мається у файлі LAB2.H.
