Міністерство освіти і науки України
Національний технічний університет України
«Київський політехнічний інститут імені Ігоря Сікорського»
Теплоенергетичний факультет
Кафедра АПЕПС
ЗВІТ
з лабораторної роботи № 2
з дисципліни «Операційні системи»
Тема «Технологія роботи з системними засобами при створенні програм»
Варіант № 17
Мета роботи:
Ознайомитися з технологією роботи створення асемблерної програми.
Створити код асемблерної програми в середовищі текстового редактора Блокнот.
Виконати трансляцію створеної програми.
Проаналізувати лістинг програми, визначити поля лістингу, віднайти відповідні сегменти програми, виправити помилки. У разі виявлення помилок повторити трансляцію програми та отримати об’єктний модуль програми.
Викликати компонувальника та отримати виконуваний модуль програми.
Запустити виконуваний модуль на виконання.
Скопіювати лістинг трансляції та результат роботи програми у командному рядку у лабораторну роботу.
Результати надати викладачу.
Теоретичні відомості:
Асемблери зазвичай виконують два або більше проходів по тексту програми при трансляції. При першому проході асемблер проглядає усю вхідну програму та створює таблицю символів, яка містить імена та мітки, що зустрічаються в програмі. При другому проході асемблер використовує таблицю символів, в якій відома довжина кожної команди та її відносне розташування, а також формує об’єктний код для кожної інструкції. Після цього асемблер створює об’єктний файл (*.obj), файл лістингу (*.lst) та файл перехресних посилань (*.crt). Процес підготовки та відладки програми на мові Асемблер включає такі етапи: підготовка у текстовому редакторі Notepad файлу за шаблоном *.asm, його трансляцію, компоновку, відладку програми за допомогою інтерактивного відладчика. Трансляція вхідного тексту програми полягає у перетворенні речень вхідної мови у коди машинних команд та виконується за допомогою програми TASM. В результаті трансляції створюється утворюється об’єктний файл з розширенням *.obj. Компоновка об’єктного файлу виконується за допомогою компонувальника (редактора зв’язків), який під’єднує до файлу основної програми файли з підпрограмами, встановлює зв’язки між ними та перетворює формат об’єктного файлу у виконуваний *.exe, який завантажується у оперативну пам’ять та виконується. Вхідний текст програми Файл P.ASM Програма асемблера Файл ТASM.EXE Результат трансляції Файл P.OBJ Програма компонувальника Файл TLINK.EXE Результат компоновки Виконуваний файл P.EXE 2 Для виконання трансляції використовується пакет TASM.EXE (програмаасемблер). В командному рядку ця програма запускається наступним чином: TASM.EXE [ключі] ім’я_вхідного_файлу [, ім’я_об’єктного_файла] [, ім’я_файла_лістингу] [, ім’я_файла_перехресних_посилань]. Пам’ятати формат запуску в командному рядку асемблера tasm.exe необов’язково. Для отримання швидкої довідки про нього достатньо запустити tasm.exe без параметрів. В квадратних дужках позначені необов’язкові параметри. Обов’язковим є лише ім’я вхідного файла. Цей файл повинен знаходитися на диску, обов’язково мати розширення *.asm. За іменем вхідного файла через кому можна задати імена об’єктного файла, лістингу та перехресних посилань. Якщо ці імена не задати, то відповідно ці файли не будуть створені. Ключі – це режими роботи транслятора. При запуску транслятора треба використовувати два ключа: /la - виведення розширеного варіанту лістингу транслятора, /zi – отримання повної інформації для відладчика. Наприклад, tasm /la /zi pr.asm Таким чином, результатом роботи транслятора є створення трьох модулів: *.lst (лістингу), *.crf (таблиці перехресних посилань: таблиці символічних імен змінних, які використовуються в програмі, та таблиці відносних посилань, в якій вказується у якому операторі визначено ім’я і де зустрічається), *.obj (об’єктного), (Замість * - ім’я_вхідного_файлу). Файл лістингу містить номер рядка тексту програми, код асемблера вхідної програми, а також розширену інформацію про цей код. Для кожної команди асемблера вказуються її машинний (об'єктний) код і зсув в кодовому сегменті. Крім того, в кінці лістингу TASM формує таблиці з інформацією про мітки і сегменти, що використовуються в програмі. Якщо є помилки або сумнівні ділянки коду, то TASM включає в кінець лістингу повідомлення про них. Запуск компоновщика (редактора зв’язку) здійснюється в командному рядку: TLINK [ключі] список об’єктних модулів [, ім’я завантажувального модуля] Ключі можна подивитися просто запустивши tlink без параметрів. При запуску компоновщика треба використовувати два ключа: /х – не створювати файл з розширенням *.map (подавляється формування файлу лістингу компоновки, в якому відображається карта завантаження, без цього файла можна обійтись), /v – передає у завантажувальний файл символьну інформацію, яка дозволяє відладчику TD виводити на екран повний текст вхідної програми, включаючи мітки, коментарі та ін. Список об’єктних модулів – це обов’язковий параметр, файли розділені пропуском або знаком плюс: tlink /х /v prog+prog1+prog2 або вказати повний шлях до цих файлів. Для отримання виконуваного модуля треба запустити tlink /х /v pr.obj, в результаті буде отриманий модуль pr.exe
Хід роботи:
Я створив новий .asm файл та записав у нього цей код асемблерної програми:
text segment ; Початок сегмента команд
assume CS:text, DS:data ; Сегментний регістр CS вказує на сегмент команд
; сегментний регістр DS - на сегмент даних
begin: mov AX, data ; Адресу сегмента спочатку завантажуємо в АХ,
mov DS, AX ; а потім переносимо з АХ в DS
mov AH, 09h ; Функція DOS 9h означає виведення на екран
mov DX, offset mesg ; Адреса повідомлення, що виводиться, повинно
int 21h ; Виклик DOS - функція переривання
mov AH, 4Ch ; Функція 4Сh - завершення програми
mov Al, 0 ; Код 0 - код успішного завершення
int 21h ; Виклик DOS
text ends ; Кінець сегмента
data segment ; Початок сегменту даних
mesg db "NACHINAEM ! $" ; Текст, що виводиться
data ends ; Кінець сегменту даних
stk segment stack ; Початок сегменту стека
db 256 dup (0) ; Резервуємо 256 байт для стеку
stk ends ; Кінець сегменту стека
end begin ; Кінець тексту програми з точкою входу
Трансляція:
Лістинг:
В програмі маємо 3 сегмента. text, data та stk.
text:
text segment ; Cегмент команд
assume CS:text, DS:data
begin: mov AX, data
mov DS, AX
mov AH, 09h
mov DX, offset mesg
int 21h
mov AH, 4Ch
mov Al, 0
int 21h ; Виклик DOS
text ends
data:
data segment ; Сегмент даних
mesg db "NACHINAEM ! $"
data ends
stk:
stk segment stack ; Cегмент стека
db 256 dup (0)
stk ends
Компанування та запуск .exe:
Програма запрацювала як й очікувалось. Для того щоб компанувальник правильно працював разом із DOSBox в Windows я скачав файли DPMI16BI.OVL та dpmimem.dll.
Висновок:
Мені вдалося ознайомитися з технологією роботи створення асемблерної програми. Я вдало відтранслював асемблер програму за допомогою TASM. Відкомпанував об’єктний модуль за допомогою TLINK. Отримав виконуваний модуль та запустив його. Як і очікував, я отримав у командному рядку повідомлення “NACHINAEM !”. Серед труднощів зустрів проблему, що для того щоб компанувальник працював у емуляторі DOSBox для Windows потрібно до шляху об’єктного модуля мати файли DPMI16BI.OVL та dpmimem.dll. Проаналізував лістинг та навчився відокремлювати сегменти. Зробив звіт та надіслав викладачу.