Міністерство освіти і науки УкраїниНаціональний технічний університет України
«Київський політехнічний інститут ім. І. Сікорського»
Кафедра автоматизації проектування енергетичних процесів і систем
Лабораторна робота №2
з дисципліни «Операційні системи»
«Технологія роботи з системними засобами при створенні програм.
Завантаження та виконання програм DOS.
Організація програм *.ЕХЕ та *.СОМ»
КИЇВ-2022
Лабораторна робота №2
Мета роботи. Ознайомитися з технологією роботи створення асемблерної програми.
Теоретична частина
Асемблери зазвичай виконують два або більше проходів по тексту програми при трансляції. При першому проході асемблер проглядає усю вхідну програму та створює таблицю символів, яка містить імена та мітки, що зустрічаються в програмі. При другому проході асемблер використовує таблицю символів, в якій відома довжина кожної команди та її відносне розташування, а також формує об’єктний код для кожної інструкції. Після цього асемблер створює об’єктний файл (*.obj), файл лістингу (*.lst) та файл перехресних посилань (*.crt).
Етапи створення програми на мові асемблеру такі:
Підготовка (або внесення змін) вихідного тексту програми;
Трансляція програми (отримання об'єктного коду);
Компонування програми (отримання виконавчого файла програми);
Налагодження програми (виправлення помилок).
Процес підготовки та відладки програми на мові Асемблер включає такі етапи: підготовка у текстовому редакторі Notepad файлу за шаблоном *.asm, його трансляцію, компоновку, відладку програми за допомогою інтерактивного відладчика.
Трансляція вхідного тексту програми полягає у перетворенні речень вхідної мови у коди машинних команд та виконується за допомогою програми TASM. В результаті трансляції створюється об’єктний файл з розширенням *.obj.
Компоновка об’єктного файлу виконується за допомогою компонувальника (редактора зв’язків), який під’єднує до файлу основної програми файли з підпрограмами, встановлює зв’язки між ними та перетворює формат об’єктного файлу у виконуваний *.exe, який завантажується у оперативну пам’ять та виконується.
Для виконання трансляції використовується пакет TASM.EXE.
При запуску транслятора треба використовувати два ключа: /la - виведення розширеного варіанту лістингу транслятора, /zi – отримання повної інформації для відладчика. Наприклад, tasm /la /zi Lab2.asm
Таким чином, результатом роботи транслятора є створення трьох модулів: *.lst (лістингу), *.crf (таблиці перехресних посилань: таблиці символічних імен змінних, які використовуються в програмі, та таблиці відносних посилань, в якій вказується у якому операторі визначено ім’я і де зустрічається), *.obj (об’єктного).
Запуск компоновщика (редактора зв’язку) здійснюється в командному рядку:
Для отримання виконуваного модуля треба запустити tlink /х /v Lab2.obj, в результаті буде отриманий модуль Lab2.exe.
При запуску компоновщика треба використовувати два ключа:
/х – не створювати файл з розширенням *.map (подавляється формування файлу лістингу компоновки, в якому відображається карта завантаження, без цього файла можна обійтись),
/v – передає у завантажувальний файл символьну інформацію, яка дозволяє відладчику TD виводити на екран повний текст вхідної програми, включаючи мітки, коментарі та ін.
Створений файл:
/
Трансляція програми:
/
Створення об’єктного файла та виконання його:
/
Лістинг:
/
Лабораторна робота №4
Мета роботи: ознайомитися зі структурою виконуваних програм *.ЕХЕ та *.СОМ та їх образом в пам’яті.
Теоретична частина
Операційна система MS DOS передбачає два типи виконуваних програм, які мають розширення *.СОМ та *.ЕХЕ .
Перед завантаженням в оперативну пам’ять СОМ- та ЕХЕ-програм DOS визначає спеціальну область оперативної пам’яті розміром 256 (100h) байт - сегментну адресу, яка називається префіксом програмного сегменту (PSP – Program Segment Prefics). PSP може використовуватися в програмі для визначення імен файлів та параметрів з командного рядка, які вводяться при запуску програми на виконання, обсягу допустимої пам'яті, змінних оточення системи та ін.
При завантаженні програми в оперативну пам’ять DOS ініціалізує як мінімум три сегментних регістри: CS, DS, SS (додатковим може бути ES). Код та дані переміщуються з файлу на диску в оперативну пам’ять, а адреси цих сегментів заносяться у CS та DS відповідно. Сегмент стека або виділяється в області, що вказана в програмі, або співпадає (якщо він явно не описаний в програмі) з самим першим сегментом програми. Адреса сегменту стека розташовується в регістрі SS.
Основні відмінності цих програм полягають у наступному:
програми типу *.СОМ (двійковий образ коду та даних програми)
• складаються тільки з одного сегменту, в якому розміщується і код програми, і дані, і стек;
• файл СОМ-формату не містить переміщуваних адрес;
• СОМ-файл завантажується, починається з адреси 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 Кбайт).
Завершення програми можна виконати декількома способами:
- через функцію 4СН (EXIT) переривання 21Н в будь-який момент, незалежно від значень регістрів;
- через функцію 00Н переривання 21Н або переривання INT 20H, у випадку коли CS вказує PSP.
При створенні програми *.СОМ необхідно виконання двох умов:
вхідний текст програми повинен мати відповідний формат з використанням мінімальної моделі пам’яті;
необхідно після компоновки отримати виконуваний файл з розширенням *.СОМ.
При використанні пакета ТАSM при виклику компоновщика необхідно вказати ключ /Т:
TASM /Z /N ім’я файлу.asm
TLINK /X /T ім’я файлу.obj
ім’я файлу.com
Код програми для .EXE файлу:
/
Трансляція та створення файла з розширенням .EXE:
/
Лістинг файлу .EXE:
/
Код програми для .COM файлу:
/
Трансляція та створення файла з розширенням .COM:
/
Висновок: під час виконання лабораторної роботи було створено код асемблерної програми в середовищі текстового редактора Блокнот, виконано трансляцію, проаналізовано лістинг, викликано компонувальника та отримано виконуваний модуль програми. Далі запустили виконуваний модуль на виконання. Ознайомлено зі структурою виконуваних програм *.ЕХЕ та *.СОМ та їх образом в пам’яті.