- •Методичні вказівки
- •Київ 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. Перелік тем лабораторних занять з дисципліни «Операційні системи»
Порядок виконання роботи
Для виконання усіх лаборараторних робіт пропонується єдиний порядок, що передбачає наступні кроки.
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-програми.