Міністерство освіти і науки України
Національний технічний університет України
«Київський політехнічний інститут імені Ігоря Сікорського»
Теплоенергетичний факультет
Кафедра автоматизації проектування енергетичних процесів і систем
Звіт
до лабораторної роботи №4
з дисципліни «Операційні системи»
Тема «Завантаження та виконання програм DOS.
Організація програм *.ЕХЕ та *.СОМ»
Варіант 12
КИЇВ-2022
Мета роботи : ознайомитися зі структурою виконуваних програм *.ЕХЕ та *.СОМ та їх образом в пам’яті.
Порядок роботи :
Ознайомитися зі структурою програми *.ЕХЕ та образом такої програми у пам’яті.
Ознайомитися зі структурою програми *.СОМ та образом такої програми у пам’яті.
Засвоїти особливості створення виконуваних програм *.ЕХЕ та *.СОМ.
Підготувати .ЕХЕ та .СОМ програми для виведення на екран повідомлення 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.
Програма може мати декілька кодових сегментів та сегментів даних і в процесі виконання за допомогою спеціальних команд здійснюється переключення між ними.Для того, щоб адресувати одночасно два сегменти даних, наприклад, для виконання операції пересилання з однієї області пам’яті в іншу, можна використовувати регістр додаткового сегмента ES. Кодовий сегмент та сегмент стеку завжди визначається вмістом своїх регістрів (CS та SS), в кожний моментвиконання програми завжди використовується якийсь один кодовий сегмент та один сегмент стека.
Усі сегменти можуть використовувати різні області пам’яті, а можуть частково або повністю перекриватися. Кодовий сегмент повинен обов’язково описуватися в програмі, усі інші сегменти можуть бути відсутніми. У цьому випадку при завантаженні програми в оперативну пам’ять DOS ініціює регістри DS та ES значенням адреси префікса програмного сегмента PSP. Регістр SS при цьому ініціалізується значенням сегменту, що знаходиться одразу за PSP, тобто першого сегменту програми. При цьому слід враховувати, що стек «зростає вниз» (при розміщенні у стек вміст регістра SP, що вказує на вершину стека, зменшується, а при зчитуванні зі стека - збільшується).
У вказівник команд ІР завантажується зсув точки входу в програму (вибирається з операнда директиви END), у вказівник стека SP – зсув кінця сегмента стека.
Образ пам’яті програми типу *.ЕХЕ :
/
Образ пам’яті програми типу *.СОМ :
/
Для створення ЕХЕ-програми необхідно виконати наступні команди:
TASM /LA /ZI ім’я файлу.asm
TLINK /X /V ім’я файлу.obj
ім’я файлу.exe.
При створенні програми *.СОМ необхідно виконання двох умов:
• вхідний текст програми повинен мати відповідний формат з використанням мінімальної моделі пам’яті;
• необхідно після компоновки отримати виконуваний файл з розширенням *.СОМ.При використанні пакета ТАSM при виклику компоновщика необхідно вказати ключ /Т:
TASM /Z /N ім’я файлу.asm
Ключ /z - дозволяє виведення на екран рядків вихідного тексту програми, в яких асемблер виявив помилки (без цього ключа пошук помилок довелося б проводити з лістингу трансляції).
/n - пригнічує виведення в лістинг таблицю ідентифікаторів (переліку символічних позначень в програмі), за рахунок чого трохи зменшується інформативність лістингу, але скорочується його розмір.
TLINK /X /T ім’я файлу.obj
Ключ /х означає не створити файл карти map.файл.
Ключ /t означає створити виконуваний com.файл.
ім’я файлу.com
При використанні програм типу *.сом при виклику асемблера ключ /ZI не використовується, аналогічно при виклику компоновщика ключ /V також не використовується. Ці ключі є неприйнятними для програм типу *.сом.
Демонстрація результатів
Програма до exe-файла
/
Створення файлу з розширенням EXE
/
Робота з TD
Вигляд турбоналагоджувача після запуску.
/
Натискаємо F9 для виконання програми.Результати:
/
Вивід повідомлення на консолі :
/
Програма до com-файла
/
Створення файлу з розширенням COM
/
Робота з TD
Вигляд турбоналагоджувача після запуску.
/
Результати відладки програми (клавіша F9):
/
Результати роботи TD в консольному режимі :
/
Висновок
В ході виконання лабараторної роботи були розглянуті структури програм *.EXE та *.COM та їх образи в пам’яті.
Створено файли з розширенням *.COM і *.EXE. В DEBUG готові файли були виконанні іще раз, результати виконання можна побачити вище.