Міністерство освіти і науки України
Національний технічний університет України
«Київський політехнічний інститут імені Ігоря Сікорського»
Теплоенергетичний факультет
Кафедра АПЕПС
ЗВІТ
з лабораторної роботи № 2
з дисципліни «Операційні системи»
Тема «Завантаження та виконання програм DOS. Організація програм *.ЕХЕ та *.СОМ»
Варіант № 17
Мета роботи:
Ознайомитися зі структурою виконуваних програм *.ЕХЕ та *.СОМ та їх образом в пам’яті.
Завдання:
Ознайомитися зі структурою програми *.ЕХЕ та образом такої програми у пам’яті.
Ознайомитися зі структурою програми *.СОМ та образом такої програми у пам’яті.
Засвоїти особливості створення виконуваних програм *.ЕХЕ та *.СОМ.
Підготувати .ЕХЕ та .СОМ програми для виведення на екран повідомлення HELLO WORD! з варіантом опису даних: msg db "Hello Word!", 0Dh, 0Ah, '$'
0Dh – символ повернення каретки (Carriage Return),
0Ah - символ переведення рядка
Продемонструвати роботу .ЕХЕ – та .СОМ-програм, пояснити розподіл пам’яті для цих програм.
У DEBUG за допомогою команди D CS:0000 ви маєте можливість переглянути машинний код програми для ехе-програми.
У DEBUG за допомогою команди ви маєте можливість переглянути дані.
Теоретичні відомості:
Операційна система MS DOS передбачає два типи виконуваних програм, які мають розширення *.СОМ та *.ЕХЕ .
Перед завантаженням в оперативну пам’ять СОМ- та ЕХЕ-програм DOS визначає спеціальну область оперативної пам’яті розміром 256 (100h) байт - сегментну адресу, яка називається префіксом програмного сегменту (PSP – Program Segment Prefics). PSP може використовуватися в програмі для визначення імен файлів та параметрів з командного рядка, які вводяться при запуску програми на виконання , обсягу допустимої пам'яті, змінних оточення системи та ін.
При завантаженні програми в оперативну пам’ять DOS ініціалізує як мінімум три сегментних регістри: CS, DS, SS (додатковим може бути ES). Код та дані переміщуються з файлу на диску в оперативну пам’ять, а адреси цих сегментів заносяться у CS та DS відповідно. Сегмент стека або виділяється в області, що вказана в програмі, або співпадає (якщо він явно не описаний в програмі) з самим першим сегментом програми. Адреса сегменту стека розташовуються в регістрі SS.
Для того, щоб адресувати одночасно два сегменти даних можна використовувати регістр додаткового сегмента ES. Кодовий сегмент та сегмент стеку завжди визначається вмістом своїх регістрів (CS та SS), в кожний момент виконання програми завжди використовується якийсь один кодовий сегмент та один сегмент стека.
Усі сегменти можуть використовувати різні області пам’яті, а можуть частково або повністю перекриватися. Кодовий сегмент повинен обов’язково описуватися в програмі, усі інші сегменти можуть бути відсутніми. У цьому випадку при завантаженні програми в оперативну пам’ять DOS ініціює регістри DS та ES значенням адреси префікса програмного сегмента 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
При використанні програм типу *.сом при виклику асемблера ключ /ZI не використовується, аналогічно при виклику компонувальника ключ /V також не використовується. Ці ключі є неприйнятними для програм типу *.сом.
Хід роботи:
Створив асемблер програму для .exe
Код Lab4.exe
.model small
.stack 100h
.data
message db "Hello World! $''
.code
start:
mov ax, @data
mov ds, ax
mov ah, 09h
mov dx, offset message
int 21h
mov ax, 4c00h
int 21h
end start
Результат виконання Lab4.exe
D CS:0000
Створив асемблер програму для .com
Код LabCOM.com
.model tiny
.code
org 100h
start:
mov ah, 09h
mov dx, offset message
int 21h
ret
message db "Hello World!",0Dh,0Ah,'$'
end start
Результат виконання LabCOM.com
D DS:100
Висновок:
На цій лабораторній роботі я ознайомився зі структурою виконуваних програм *.ЕХЕ та *.СОМ та їх образом в пам’яті. Створив виконувальні файли .exe та .com для програми. Продемонстрував їх роботу та їх образ в пам’яті. Отримав очікуваний результат. Труднощів не зустрів.