- •Методичні вказівки
- •Київ 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. Перелік тем лабораторних занять з дисципліни «Операційні системи»
Лабораторна робота n 2. Com-файли.
Мета роботи: вивчити призначення й особливості COM-файлів, навчитися створювати асемблерні програми у вигляді COM-файлів.
КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ
Программу, що може виконуватись, можна створювати не тільки у вигляді EXE-файлу, як було показано в лабораторній роботі N1_2, але й у вигляді COM-файлу. Прикладом командного файлу може служити COMMAND.COM. Програми у вигляді EXE-файлу й у вигляді COM-файлу мають наступні розходження.
1. Розмір програми. Програма у форматі EXE може мати будь-як розмір. COM-програма обмежен розміром одного сегмента і не перевищує 64 Кбайт. Розмір COM-файлу завжди менше розміру EXE-файлу. Одна з причин цього - відсутність у COM-файлі спеціального 512-байтового заголовка EXE-файлу.
2. Сегмент стека. У EXE-програмі необхідно визначити сегмент стека. У COM-програмі стік генерується автоматично. По цьому при створенні асемблерной програми, що буде перетворена в COM-файл, сегмент стека повинна бути опущена. Якщо максимальний розмір сегмента (64ДО) достатній для програми, то MS DOS установлює регістр SP на кінець сегмента (FFFE). Це вершина стека. Якщо програма займає весь сегмент, тобто місця для стека недостатньо, то MS DOS установлює стек наприкінці пам'яті.
3. Сегмент даних. У EXE-програмі звичайно визначається сегмент даних і регістр DS инициализируется адресою цього сегмента. У COM-програмі всі дані повинні знаходитися в кодовому сегменті. У такий спосіб у COM-програмі у Вас буде тільки один сегмент - сегмент кодів.
4. Ініціалізація. На початку EXE-програми виконується запис у стек значення регістра DS, нуля й ініціалізація регістра DS. Так сегменти стека і даних у COM-програмі не визначені, те ці кроки в ній відсутні. При завантаженні COM-програми в оперативну пам'ять усі сегментні регістри містять адреса префікса програмного сегмента (PSP) - 256-байтового (100h) блоку резервируемого MS DOS в оперативній пам'яті перед EXE- і COM-програмою. Тому що регістр CS також буде встановлений на початок PSP, Вам треба установити його на початок Вашої програми. Виконується це директивою ORG 100h після директиви SEGMENT. Ця директива установить значення покажчика команд (зсув відносно CS) 100h.
5. Створення COM-файлу.
При роботі в пакеті MASM Ви створюєте EXE-файл, як було показано в лабораторній роботі N1_2. При цьому компоновщиком буде видане повідомлення:
Warnіng: No STACK Segment (Сегмент стека не визначена).
Це повідомлення можна проігнорувати.
Для перетворення EXE-фала в COM-файл використовується програма EXE2BІ. Уведіть командний рядок виду:
[шлях]exe2bіn [шлях]ім'я_файлу.exe,[шлях]ім'я_файлу.com
Тому що перший файл завжди має розширення .exe, те його можна не вказувати. Для втрого файлу за замовчуванням прийняте розширення .bіn, тому вкажіть розширення .com явно.
При роботі в пакеті TASM для створення COM-файлу необхідно в процесі компонування вказати опцію /t. Командний рядок при компонуванні буде мати вид: [шлях]tlіnk/t objfіles,comfіles,mapfіles,lіbfіles,deffіles
При цьому виконуваний файл буде за замовчуванням мати розширення .com.
Давайте перетворимо програму з лабоатороной роботи N1_2 у вид, необхідний для створення COM-програми.
SEGCOD SEGMENT PARA 'CODE'
ASSUME CS:SEGCOD,SS:SEGCOD,DS:SEGCOD,ES:SEGCOD
ORG 100H
BEGІ: JMP MAІ
DB 12 DUP(?)
MAІ PROC NEAR
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
MAІ ENDP
SEGCOD ENDS
END BEGІ
Зверніть увагу, які були зроблені зміни.
1. Сегмент стека і сегмент даних відсутні.
2. Директива ASSUME инициализирует усі сегментні регістри адресою початку сегмента кодів.
3. Директива ORG 100h установлює покажчик команд на початок Вашої програми (після PSP).
4. Команда JMP (безумовний перехід) служить для обходу області даних.
5. Після мітки крапки входу у Вашу програму (BEGІ) коштує двокрапка. Його призначення буде розглянуто в лабораторній роботі N .
6. Процедура MAІ задана з параметром NEAR (внутрішня) тому що її початок уже не є крапкою входу в програму.
ПІДГОТОВКА ДО РОБОТИ
1. Вивчити короткі теоретичні відомості і рекомендовану літературу.
2. Перетворити вихідний текст програми "Завдання N1", підготовлений для лабораторної роботи N 1_1 для створення COM-файлу.
РОБОЧЕ ЗАВДАННЯ
Набити підготовлену програму, оттранслировать її, скомпонувати, перетворити в COM-файл, налагодити.
Запустити програму на виконання. Перевірити, чи здійснюється повернення в MS DOS.
ВИМОГА ДО ЗВІТУ
У звіті зафіксувати текст файлу з підготовленою програмою.
КОНТРОЛЬНІ ПИТАННЯ
1. Назвіть основні відмінності EXE- і COM-програми.
2. Як формується стек у COM-програмі?