Міністерство освіти і науки УкраїниНаціональний технічний університет України
«Київський політехнічний інститут ім. І. Сікорського»
Кафедра автоматизації проектування енергетичних процесів і систем
Лабораторна робота №3
з дисципліни «Операційні системи»
«Технологія роботи з налагоджувачем TurboDebugger (TD) фірми Borland»
Мета роботи: ознайомитися зі структурою виконуваних програм *.ЕХЕ та *.СОМ та їх образом в пам’яті.
Порядок роботи:
Ознайомитися зі структурою програми *.ЕХЕ та образом такої програми у пам’яті.
Ознайомитися зі структурою програми *.СОМ та образом такої програми у пам’яті.
Засвоїти особливості створення виконуваних програм *.ЕХЕ та *.СОМ.
Продемонструвати основні операції з налагодження на прикладі програми з лабораторної роботи № 2.
Підготувати .ЕХЕ та .СОМ програми для виведення на екран повідомлення HELLO WORD! з варіантом опису даних: msg db "Hello Word!", 0Dh, 0Ah, '$'
0Dh – символ повернення каретки (Carriage Return),
0Ah - символ переведення рядка
Продемонструвати роботу .ЕХЕ – та .СОМ-програм, пояcнити розподіл пам’яті для цих програм.
У DEBUG за допомогою команди D CS:0000 ви маєте можливість переглянути машинний код програми для ехе-програми.
У DEBUG за допомогою команди D DS:100 ви маєте можливість переглянути дані.
Теоретична частина:
Операційна система MS DOS передбачає два типи виконуваних програм, які мають розширення *.СОМ та *.ЕХЕ .
Перед завантаженням в оперативну пам’ять СОМ- та ЕХЕ-програм DOS визначає спеціальну область оперативної пам’яті розміром 256 (100h) байт - сегментну адресу, яка називається префіксом програмного сегменту (PSP – Program Segment Prefics). PSP може використовуватися в програмі для визначення імен файлів та параметрів з командного рядка, які вводяться при запуску програми на виконання, обсягу допустимої пам'яті, змінних оточення системи та ін.
При завантаженні програми в оперативну пам’ять DOS ініціалізує як мінімум три сегментних регістри: CS, DS, SS (додатковим може бути ES). Код та дані переміщуються з файлу на диску в оперативну пам’ять, а адреси цих сегментів заносяться у CS та DS відповідно. Сегмент стека або виділяється в області, що вказана в програмі, або співпадає (якщо він явно не описаний в програмі) з самим першим сегментом програми. Адреса сегменту стека розташовується в регістрі SS. Програма може мати декілька кодових сегментів та сегментів даних і в процесі виконання за допомогою спеціальних команд здійснюється переключення між ними.
Розмір програми типу *.ЕХЕ не має жорстких обмежень, тому що програми може мати будь-яку кількість сегментів команд та даних;
• ЕХЕ-файл завантажується, починається з адреси PSP:0100h;
• DS та ES вказують на початок PSP;
• CS, IP, SS, SP ініціалізуються значеннями, зазначеними в заголовку ЕХЕ;
• використовується модель пам’яті SMALL, яка передбачає розташування структурних частин програми у двох сегментах: сегменту кода програми (64 Кбайт) та сегменту даних і стека , що належать одній групі Dgroup (64 Кбайт).
Завершення програми можна виконати декількома способами:
через функцію 4СН (EXIT) переривання 21Н в будь-який момент, незалежно від значень регістрів;
через функцію 00Н переривання 21Н або переривання INT 20H, у випадку коли CS вказує PSP.
Програми типу *.ЕХЕ та *.СОМ розрізняються форматом вхідного тексту, процедурою підготовки виконуваного файлу, а також форматами завантажувальних файлів.
Для створення ЕХЕ-програми необхідно виконати наступні команди:
TASM /LA /ZI ім’я файлу.asm
TLINK /X /V ім’я файлу.obj
ім’я файлу.exe
При створенні програми *.СОМ необхідно виконання двох умов:
вхідний текст програми повинен мати відповідний формат з використанням мінімальної моделі пам’яті;
необхідно після компоновки отримати виконуваний файл з розширенням *.СОМ.
При використанні пакета ТАSM при виклику компоновщика необхідно вказати ключ /Т:
TASM /Z /N ім’я файлу.asm
TLINK /X /T ім’я файлу.obj
ім’я файлу.com
При використанні програм типу *.сом при виклику асемблера ключ /ZI не використовується, аналогічно при виклику компоновщика ключ /V також не використовується. Ці ключі є неприйнятними для програм типу *.сом.
Хід роботи:
Код програми для створення файлу lab4.exe:
/
.stack 100h - виділяє сегмент стеку розміром 256 байт;
int 21h - це виклик системної функції DOS: вивести рядок на екран.
Створення .exe файлу:
Монтуємо локальний диск, створюємо та запускаємо файл lab4.exe у Turbo Debugger (TD).
/
Вигляд TD після запуску файлу lab4.exe, який виконаний клавішею F7 прокроково:
/
У DEBUG за допомогою команди D CS:0000 ми маємо можливість переглянути машинний код програми для ехе-програми. Комбінація ALT+F5 переключає до середовища DOS, де можна побачити результат виконання.
/
Код програми для створення файлу lab2co.com:
/
оrg 100h це ж саме що .stack 100h для створення ехе файлу - виділяє сегмент стеку розміром 256 байт;
ret це завершення COM-програми.
Створення lab4co.com файлу:
/
Відкриття lab4co.com у TD:
/ У DEBUG за допомогою команди DS:100 ми маємо можливість переглянути дані.
/
Висновки : у цій лабораторній роботі було ознайомлено зі структурою виконуваних програм *.EXE та *.COM та їх образом пам’яті.
Програми типу *.COM мають лише один сегмент пам’яті, в якому розміщується і код програми, і дані, і стек. На відміну від *.COM тип файлів*.EXE можемати будь-яку кількість сегментів. Розмір програми *.COM не може перевищувати 64 КБайт, в той час як *.ЕХЕ не має обмежень по розміру. І *.ЕХЕ і *.СОМ завантажуються, починається з адреси PSP:0100h;