Міністерство освіти і науки УкраїниНаціональний технічний університет України
«Київський політехнічний інститут ім. І. Сікорського»
Кафедра автоматизації проектування енергетичних процесів і систем
Лабораторна робота №4
з дисципліни «Операційні системи»
«Технологія роботи з системними засобами при створенні програм.
Завантаження та виконання програм DOS.
Організація програм *.ЕХЕ та *.СОМ»
Мета роботи: ознайомитися зі структурою виконуваних програм *.ЕХЕ та *.СОМ та їх образом в пам’яті.
Порядок роботи:
1. Ознайомитися зі структурою програми *.ЕХЕ та образом такої програми у пам’яті.
2. Ознайомитися зі структурою програми *.СОМ та образом такої програми у пам’яті.
3. Засвоїти особливості створення виконуваних програм *.ЕХЕ та *.СОМ.
4. Підготувати .ЕХЕ та .СОМ програми для виведення на екран повідомлення HELLO WORD! з варіантом опису даних: msg db "Hello Word!", 0Dh, 0Ah, '$'
0Dh – символ повернення каретки (Carriage Return),
0Ah - символ переведення рядка
5. Продемонструвати роботу .ЕХЕ – та .СОМ-програм, пояcнити розподіл пам’яті для цих програм.
6. У DEBUG за допомогою команди D CS:0000 ви маєте можливість переглянути машинний код програми для ехе-програми.
7. У DEBUG за допомогою команди D DS:100 ви маєте можливість переглянути дані.
Теоретична частина
Основні відмінності цих програм полягають у наступному:
програми типу *.СОМ (двійковий образ коду та даних програми) • складаються тільки з одного сегменту, в якому розміщується і код програми, і дані, і стек;
• файл СОМ-формату не містить переміщуваних адрес;
• СОМ-файл завантажується, починається з адреси PSP:0100h; • CS, DS, ES, SS вказують на PSP;
• SP вказує на кінець сегмента PSP (зазвичай 0FFFEh);
• ІР містить 100h (перший байт модуля) в результаті команди JMP PSP:100h;
• розмір програми типу *.СОМ не може перевищувати 64 Кбайт; • використовується модель пам’яті TINY;
• образ СОМ-файла зчитується з диску та розташовується в пам’яті, починаючи PSP:0100h;
• програма генерує стек автоматично, тому в самій асемблерній програмі стек має бути відсутнім; усі дані повинні бути визначені у сегменті коду;
в програмах типу *.ЕХЕ міститься спеціальний заголовок, за допомогою якого завантажувач виконує налаштування посилань на сегменти у завантаженому модулі
• використовуються окремі сегменти і для коду, і для даних, і для стеку; • розмір програми типу *.ЕХЕ не має жорстких обмежень, тому що програми може мати будь-яку кількість сегментів команд та даних; • ЕХЕ-файл завантажується, починається з адреси PSP:0100h; • DS та ES вказують на початок PSP;
• CS, IP, SS, SP ініціалізуються значеннями, зазначеними в заголовку ЕХЕ;
• використовується модель пам’яті SMALL, яка передбачає розташування структурних частин програми у двох сегментах: сегменту кода програми (64 Кбайт) та сегменту даних і стека , що належать одній групі Dgroup (64 Кбайт).
Ім’я – ідентифікатор конкретного сегменту, що використовується при призначенні адреси та поєднанні з іншими сегментами.
Вирівнювання – вказує граничні значення на початок сегмента. В процесі асемблювання, якщо поточна позиція на початку сегмента не задовольняє встановленому атрибуту, лічильник адреси збільшується на відповідну величину, зміщуючи початок сегменту в область старших адрес (word – початок сегменту повинен мати парну адресу; para парна адреса, яка є кратною параграфу, тобто 16 біт).
Поєднання – встановлює правила поєднання декількох сегментів з однаковимим іменем. Параметр Public послідовно поєднує сегменти з однаковим іменем в один великий сегмент, що має адресу першого з поєднуючих сегментів.
Клас – виконує роль категорії сегмента. Усі сегменти однакового класу під час роботи компоновщика розташовуються один за одним у пам’яті. Група – дозволяє здійснити доступ до даних з усіх сегментів, що знаходяться в групі, за допомогою завантаження адреси групи у сегментний регістр.
Використання директиви Model дозволяє використовувати службові ідентифікатори, за допомогою яких можна отримати адреси сегментів, що використовуються:
@code – 16-розрядна адреса сегмента коду;
@data – 16-розрядна адреса сегмента даних типу near;
@stack – 16-розрядна адреса сегмента стека.
Наприклад, MOV AX, @DATA
MOV DS, AX ініціалізація сегмента даних.
Для створення ЕХЕ-програми необхідно виконати наступні команди: TASM /LA /ZI ім’я файлу.asm
TLINK /X /V ім’я файлу.obj
ім’я файлу.exe
При створенні програми *.СОМ необхідно виконання двох умов: • вхідний текст програми повинен мати відповідний формат з використанням мінімальної моделі пам’яті;
• необхідно після компоновки отримати виконуваний файл з розширенням *.СОМ.
При використанні пакета ТАSM при виклику компоновщика необхідно вказати ключ /Т:
TASM /Z /N ім’я файлу.asm
4
Ключ /z дозволяє виведення на екран рядків вихідного тексту програми, в яких асемблер виявив помилки (без цього ключа пошук помилок довелося б проводити з лістингу трансляції).
/n пригнічує виведення в лістинг таблицю ідентифікаторів (переліку символічних позначень в програмі), за рахунок чого трохи зменшується інформативність лістингу, але скорочується його розмір.
TLINK /X /T ім’я файлу.obj
Ключ /х означає не створити файл карти map.файл.
Ключ /t означає створити виконуваний com.файл.
ім’я файлу.com
При використанні програм типу *.сом при виклику асемблера ключ /ZI не використовується, аналогічно при виклику компоновщика ключ /V також не використовується. Ці ключі є неприйнятними для програм типу *.сом.
Файли .asm:
EXE:
/
COM:
/
Трансляція та створення файлів:
EXE:
/
COM:
/
Лістинг:
EXE:
/
/
Висновок: За результатом роботи було вивчено основи структур програм *.ЕХЕ і *.СОМ та їх образом в пам’яті. Створено файли *.ЕХЕ і *.СОМ за допомогою файлу розширення *.ASM. Їх запущено в дію, програми виконані без помилок. У результаті кожна з програм вивела повідомлення ”Hello world”.