Учебное пособие: Мова програмування Assembler
2. Архітектура виконуваного модуля
3. Поняття "компонування"
4. Види заголовків виконуваних файлів та огляд видів форматів виконуваних модулів та об’єктних файлів
1 . Поняття "об’єктного файлу" та "виконуваного модуля"
Об’єктним файлом називається файл, який містить виключно машинний код без будь-якої прив'язки до особливостей операційної системи.
Виконуваним модулем називається такий об’єктний файл, якому передує так званий заголовок, який вказує, яким чином операційна система повинна виконувати цей код.
2 . Архітектура виконуючого модуля
OBJ-модуль - більш наближений до виконавчих форм, але ще не готовий до виконання. Крок компонування включає перетворення OBJ-модуля в EXE (здійсненний) модуль, що містить машинний код. Програма LINK, що знаходиться на диску DOS, виконує наступне:
1. Завершує формування в OBJ-модулі адрес, що залишився невизначеним після асемблювання. В багатьох наступних програмах такі адреси асемблер відмічаєяк -і-іR.
2. Компонує окремо, якщо необхідно, більше одного асемблюваного модуля в одну завантажувальну (здійсненну) програму; можливо дві чи більше асемблерних програм,або асемблерну програму з програмами, написанимина мовах високого рівня, таких як Паскаль чи Бейсік.
3. Ініціалізує EXE-модуль командами завантаження длявиконання.
Після компоновки OBJ-модуля (одного чи більше) у EXE-модуль, можна виконати EXE-модуль будь-яку кількість раз. Але, якщо необхідно внести деякі зміни в EXE-модуль, варто скорегувати вихідну програму, асемблювати її в інший OBJ-модуль і виконати компоновку OBJ-модуля в новий EXE-модуль. Навіть, якщо ці кроки поки залишаються незрозумілими, ви зрозумієте, що, одержавши небагато навичок, весь процес підготовки EXE-модуля буде доведений до автоматизму. Помітьте: визначені типи EXE-програм можна перетворити в дуже ефективні COM-програми. Якщо в результаті асемблюваня не виявлено помилок, то cлідуючий крок - компоновка об'єктного модуля. Файл EXASM1.OBJ містить тільки машинний код у шістнадцятковій формі. Оскільки програма може завантажуватися майже в будь-яке місце пам'яті для виконання, тому асемблер може не визначити всі машинні адреси. Крім того, можуть використовуватися інші (під) програми для об'єднання з основними. Призначенням програми LINK є завершення визначення адресних посилань і об'єднання (якщо потрібно) декількох програм. Для виконання можна також створювати COM-файли. Прикладом часто використовуваного COM-файлу є COMMAND.COM. Програма EXE2BIN.COM в оперативній системі DOS перетворить EXE-файли в COM-файли. Фактично ця програма створює BIN (двійковий) файл, тому вона і називається "перетворювач EXE у Вin (EXE-to-BIN)". Вихідний Вin-файл можна переназвати у COM-файл.
РОЗХОДЖЕННЯ МІЖ ПРОГРАМАМИ В EXE і COM-файлах
Незважаючи на те, що EXE2BIN перетворить EXE-файл у COM-файл, існують визначені розходження між програмою, виконуваної як EXE-файл, і програмою, виконуваної як COM-файл.
Розмір програми.
EXE-програма може мати будь-який розмір, у той час як COM-файл обмежений розміром одного сегмента і не перевищує 64ДО. COM-файл завжди менший, ніж відповідаючий EXE-файл; одна з причин цього - відсутність у COM-файлі 512-байтового початкового блоку EXE-файлу.
Сегмент стека.
У EXE-програмі визначається сегмент стека, у той час як COM-програма генерує стек автоматично. У такий спосіб при створенні асемблерної програми, яка буде перетворена в COM-файл, стек повинен бути опущений.
Сегмент даних.
У EXE програмі звичайно визначається сегмент даних, а регістр DS ініціалізується адресою цього сегмента. У COM-програмі всі дані повинні бути визначені у сегменті коду. Нижче буде показаний простий спосіб ріш?