ВІКІСТОРІНКА
Навигация:
Інформатика
Історія
Автоматизація
Адміністрування
Антропологія
Архітектура
Біологія
Будівництво
Бухгалтерія
Військова наука
Виробництво
Географія
Геологія
Господарство
Демографія
Екологія
Економіка
Електроніка
Енергетика
Журналістика
Кінематографія
Комп'ютеризація
Креслення
Кулінарія
Культура
Культура
Лінгвістика
Література
Лексикологія
Логіка
Маркетинг
Математика
Медицина
Менеджмент
Металургія
Метрологія
Мистецтво
Музика
Наукознавство
Освіта
Охорона Праці
Підприємництво
Педагогіка
Поліграфія
Право
Приладобудування
Програмування
Психологія
Радіозв'язок
Релігія
Риторика
Соціологія
Спорт
Стандартизація
Статистика
Технології
Торгівля
Транспорт
Фізіологія
Фізика
Філософія
Фінанси
Фармакологія


Призначення та основні функції компонувача

(редактора зв’язків)

Об’єктна програма, яку ми отримуємо після трансляції, не може бути відразу виконана.

По-перше, всі адреси в об’єктній програмі є відносними, оскільки в кожному сегменті вони починаються з нульової адреси. У випадку, коли вхідна програма складається з окремих модулів, кожний з яких транслювався окремо, їх об’єктні модулі необхідно об’єднати в один, виконавши при цьому настроювання всіх адрес.

Таким чином, необхідна спеціальна системна програма, що називається компонувачом, або редактором зв’язків, для виконання таких функцій:

· розподілення пам’яті для всіх програмних модулів (функція розподілення);

· зв’язування в одне ціле програмних модулів шляхом визначення значень зовнішніх символічних імен між ними (функція зв’язування);

· настроювання в програмі всіх величин, що залежать від конкретних фізичних адрес (функція переміщення).

Результатом роботи компонувача є завантажувальний модуль.

Для того, щоб виконати завантажувальний модуль, його необхідно розмістити в потрібну область оперативної пам’яті, змінивши попередньо всі відносні адреси на абсолютні, тобто фізичні. Цю останню задачу виконує сис­тем­на програма завантажувач.

Загальна схема виконання найпростішої одномодульної прикладної програми в комп’ютері наведена на рис.4.

Головною властивістю компонувача є можливість з його допо­мо­гою реалізувати принцип модульного програмування. Розробка складних при­клад­них програм як набору вхідних модулів має певні переваги, а саме:

- значно спрощується процес налагоджування програм;

- є можливість використовувати в програмі модулі. які налагоджені раніше;

- окремі модулі можна писати на різних мовах програмування.

 

 


Типи компонувачів

 

Існує декілька типів компонувачів. Найбільше розповсюджені з них такі:

· компонувач LINK ( розробник – фірма Microsoft);

· компонувач MSLINK (розробник – фірма Microsoft);

· компонувач TLINK (розробник – фірма Borland International).

Компонувач TLINK серед наведених є найшвидшим, хоча і має ряд обмежень:

- не підтримуються оверлейні структури;

- сегменти з одним і тим самим іменем і класом повинні бути всі здатні до об’єднання, або всі не здатні;

- не можна зв’язати разом об’єктні коди, відтрансльовані компіляторами Microsoft С та Microsoft Fortran, оскільки вони мають різні формати об’єктних модулів.

Надалі розглядатимемо функціонування компонувачів TLINК та LINK, які за виконуваними функціями близькі один до одного.

 

Запуск компонувача на виконання

 

Вхідною інформацією для компонувача є один або декілька об’єктних модулів, що містяться у файлах типу “.OBJ”. Об’єктні модулі можуть також знаходитись в об’єктних бібліотеках.

В результаті компонування може бути отримано два файли:

- файл, що містить завантажувальний модуль (типу “.ЕХЕ” або “.СОМ”);

- файл, що містить карту завантаження (тип файла “.МАР”).

Кількість вхідних файлів та їх структура визначаються способом запуску компонувача на виконання.

Формат команди запуску компонувача TLINK на виконання має такий вигляд:

TLINK [options] objfiles, mapfiles, libfiles

де options – опції, що визначають додаткові можливості компонувача;

objfilesім’я об’єктного файла;

mapfilesім’я файла, що містить карту завантаження;

libfiles ім’я об’єктної бібліотеки.

Нехай, наприклад, об’єктний модуль знаходиться у файлі “PROG.OBJ”. Тоді для отримання завантажувального модуля і карти завантаження необхідно виконати команду

TLINK PROG.

В результаті компонування будуть сформовані файли “PROG.EXE” та “PROG.MAP”.

При об’єднані декількох об’єктних модулів, наприклад, “PROG1.OBJ” та “PROG2.OBJ”, команда запуску TLINK може бути такою:

TLINK PROG1+PROG2, PR, PR

В результаті компонування будуть створені єдиний завантажувальний модуль у файлі “PR.EXE” і об’єднана карта завантаження у файлі “PR.MAP”.

Якщо деякі об’єктні модулі знаходяться в об’єктній бібліотеці “MYLIB.OBJ”, то команда запуску TLINK буде такою:

TLINK PROG1, PR, PR, MYLIB

Якщо в командному рядку набрати тільки TLINK, тоді можна отримати довідкову інформацію про опції компонувача. Опції, що використовуються найчастіше, такі:

TLINK /m PROC – видача карти завантаження з таблицею зовнішніх імен;

TLINK /s PROC – видача розширеної карти завантаження (по сег­мен­тах);

TLINK /x PROC – заборона на видачу карти завантаження;

TLINK /t PROC – створення завантажувального модуля у файлі типу “.СОМ”;

TLINK /v PROC – отримання додаткової довідкової інформації для на­ла­год­жувача TURBO DEBUGGER.

 

Карта завантаження

Карта завантаження (карта зв’язків), що знаходиться у файлі “.МАР”, містить результат роботи компонувача, тобто являє собою по суті лістинг компонувача.

У цій карті для кожного сегмента вказано його довжину в байтах, а також початкову та кінцеву адреси у тому вигляді, в якому вони будуть завантажені в оперативну пам’ять. Всі ці адреси є 20-бітовими і розпочинаються від нульової комірки.

Приклад найпростішої карти завантаження:

START STOP LENGTH NAME

00000H 0007FH 00080H SSTACK

00080H 00085H 00006H DATA

00090H 000B8H 00029H CODE

Оскільки завантаження програми в оперативну пам’ять здійснюється операційною системою, то завантажувач змінить значення цих адрес. Але ж відносно один одного їх значення залишаться такими самими.

Зазвичай сегменти розташовуються на границях параграфів для того, щоб адреси зміщення зберігали вірні значення. При цьому між окремими сег­ментами можуть знаходитись невикористані байти (до 15 байтів), як це видно з попереднього прикладу. Але в Асемблері передбачено засоби, що за­без­печують більш щільне розміщення сегментів. За допомогою дирек­ти­ви SEGMENT можна задавати тип вирівнювання на границях слів або байтів.

Наприкінці карти завантаження вказується вхідна точка вико­нуваного файла. Ця адреса, як і інші, розраховується по відношенню до початку завантажувального модуля і настроюється в пам’яті завантажувача. Існує декілька способів вказування стартової адреси для завантажувального модуля типу “.ЕХЕ”.

При одному із способів програма виконується, починаючи з першого байта. При цьому необхідно слідкувати за тим. щоб в першому байті першого сегмента виконуваного файла містилася саме та команда, з якої і треба починати виконання.

Переважає спосіб задання вхідної точки в директиві END головного модуля програми:

END START,

де START – мітка першої виконуваної команди у програмі.

У випадку, коли в програмі задано більше, ніж одна точка входу, компонувач вибирає ту, яка вказана останньою.

Все це справедливо для завантажувального модуля типу “.ЕХЕ”. Модулі типу “.СОМ” завжди починають виконуватись зі зміщення 100Н сегмента коду.

 

© 2013 wikipage.com.ua - Дякуємо за посилання на wikipage.com.ua | Контакти