Міністерство освіти і науки України
Національний технічний університет України
«Київський політехнічний інститут ім. І. Сікорського»
Кафедра автоматизації проектування енергетичних процесів і систем
Лабораторна робота № 4
з дисципліни «Операційні системи»
«Завантаження та виконання програм DOS. Організація програм *.EXE та *.COM»
Робота студента 1 курсу, ТР-15
Смірнова Максим Олекандровича
Перевірила д.т.н., проф. Левченко Л.О.
КИЇВ 2022Мета роботи. Ознайомитися зі структурою виконуваних програм *.EXE та *.COM та їх образом в пам’яті.
Теоретичний опис роботи
Операційна система MS DOS передбачає два типи виконуваних програм, які мають розширення *.СОМ та *.ЕХЕ .
Перед завантаженням в оперативну пам’ять СОМ- та ЕХЕ-програм DOS визначає спеціальну область оперативної пам’яті розміром 256 (100h) байт - сегментну адресу, яка називається префіксом програмного сегменту (PSP – Program Segment Prefics). PSP може використовуватися в програмі для визначення імен файлів та параметрів з командного рядка, які вводяться при запуску програми на виконання, обсягу допустимої пам'яті, змінних оточення системи та ін.
При завантаженні програми в оперативну пам’ять DOS ініціалізує як мінімум три сегментних регістри: CS, DS, SS (додатковим може бути ES). Код та дані переміщуються з файлу на диску в оперативну пам’ять, а адреси цих сегментів заносяться у CS та DS відповідно. Сегмент стека або виділяється в області, що вказана в програмі, або співпадає (якщо він явно не описаний в програмі) з самим першим сегментом програми. Адреса сегменту стека розташовується в регістрі SS. Програма може мати декілька кодових сегментів та сегментів даних і в процесі виконання за допомогою спеціальних команд здійснюється переключення між ними.
Усі сегменти можуть використовувати різні області пам’яті, а можуть частково або повністю перекриватися. Кодовий сегмент повинен обов’язково описуватися в програмі, усі інші сегменти можуть бути відсутніми. У цьому випадку при завантаженні програми в оперативну пам’ять DOS ініціює регістри DS та ES значенням адреси префікса програмного сегмента PSP. Регістр SS при цьому ініціалізується значенням сегменту, що знаходиться одразу за PSP, тобто першого сегменту програми. При цьому слід враховувати, що стек «зростає вниз» (при розміщенні у стек вміст регістра SP, що вказує на вершину стека, зменшується, а при зчитуванні зі стека - збільшується). Тому при розміщенні у стек будь-яких значень вони можуть затерти PSP, в зв’язку з цим слід завжди сегмент стеку описувати в програмі явно та задавати для нього розмір, достатній для нормальної роботи. У вказівник команд ІР завантажується зсув точки входу в програму (вибирається з операнда директиви END), у вказівник стека SP – зсув кінця сегмента стека.
Завершення програми можна виконати декількома способами:
через функцію 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
Порядок роботи
Ознайомитися зі структурою програми *.EXE та образом такої програми в пам’яті.
Ознайомитися зі структурою програми *.COM та образом такої програми в пам’яті
Засвоїти особливості створення виконуваних програм *.EXE та *.COM.
Підготувати .EXE та .COM програми для виведення на екран повідомлення HELLO WORLD! з варіантом опису ланих:
msg db "Hello Word!", 0Dh, 0Ah, '$'
0Dh – символ повернення каретки (Carriage Return),
0Ah - символ переведення рядка
Продемонструвати роботу .EXE та .COM-програм, пояснити розподіл пам’яті для цих програм.
У DEBUG за допомогою команди D CS:0000 ви маєте можливість переглянути машинний код програми для exe-програми.
У DEBUG за допомогою команди D DS:100 ви маєте можливість переглянути дані.
Результати виконання роботи
Код програми для .EXE:
/
Створення файлу .EXE:
/
/
TD після запуску smirnov.exe:
/
Тут ми можемо використаємо F9 для виконання програми та ALT+F5 для виведення результату
Виведення Hello World в консольному режимі:
/
Код програми для .COM:
/
Створення файлу .COM:
/
TD після запуску smirnov2.exe:
/
Виведення Hello World в консольному режимі:
/
Лістинг файлу .EXE
/
Висновок: під час виконання лабораторної роботи №4 я ознайомився з структурою .EXE й .COM файлів. За допомогою .asm файлу створено .EXE та .COM файли та успішно їх виконано. Надано лістинг файл .EXE файлу. Також для створення .EXE та .COM файлів на початку було створено .OBJ файл.