Запуск LINK

Запуск LINK може бути здійснений трьома способами:

1. З використанням підказок.

2. За допомогою командного рядка DOS.

3. З використанням файлу відповіді.

Для запуску LINK з використанням підказок необхідно ввести командний рядок, що містить тільки ім'я лінкера LINK зі специфікацією підзаголовка, якщо він потрібен. LINK перейде в діалоговий режим і серією підказок запросить у користувача інформацію про наступні файли (відповідь полягає в наборі необхідних символів і натисканні клавіші ENTER):

1. Ім'я об'єктного файлу. Якщо при відповіді не зазначене розширення, передбачається OBJ. Якщо потрібно визначити кілька файлів, їхні імена розділяються символом + . Якщо усі імена не містяться на одному рядку, введення імен можна продовжити, поставивши символ + в останню позицію поточного рядка. У цьому випадку LINK повторить запит для введення додаткових імен.

2. Ім'я виконавчого файлу. Якщо при відповіді не зазначено розширення, передбачається EXE. Базове ім'я виконавчого файлу за замовчуванням збігається з базовим ім'ям об'єктного файлу.

3. Ім'я файлу плану модуля. Якщо при відповіді не зазначене розширення, передбачається MAP. Базове ім'я по умовчанню NUL.

4. Ім'я бібліотеки. Якщо при відповіді не зазначене розширення, передбачається LIB. Можна задавати кілька імен бібліотек за аналогією з OBJ-файлами.Якщо, не вводячи імені, відразу натиснути ENTER,бібліотеки використовуватися не будуть.У кожній відповіді після символу / можуть бути задані опції LINK, що описані в п.3.3. Якщо в якій-небудь відповіді специфікований символ ";", LINK вийде з діалогового режиму й встановить, що залишилися імена за замовчуванням з наступного списку:

 

<ім'я об'єктного файлу>.EXE

NUL.MAP

 

Бібліотеки не використовуються.

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

 

LINK <ім'я об'єктного файлу>[,[<ім'я виконавчого файлу>]

[,[<ім'я файлу плану>][,[<ім'я бібліотеки>]]]][<опції>][;]

 

Символ ; може бути специфікований у будь-якому місці командного рядка до того, як були визначені усі файли. У цьому випадку імена невизначених файлів, що залишилися, приймаються за замовчуванням із приведеного вище списку. З цього ж списку приймаються за замовчуванням імена файлів, специфікація яких у командному рядку опущена (за допомогою зайвої коми). Якщо в командному рядку виявлена помилка, про це повідомляється через консоль, і LINK переходить у діалоговий режим. Якщо специфікована хоча б одна з опцій /MAP чи /LINENUMBERS, файл плану створюється незалежно від того, чи зазначене його ім'я в командному рядку. У цьому випадку, якщо його ім'я не специфіковане, воно приймається за замовчуванням - <ім'я об'єктного файлу>.MAP. При вказівці декількох об'єктних файлів бібліотек їхні імена розділяються символами + . Якщо визначені не усі файли (але не опущені за допомогою зайвої коми, і не специфікована установка імен, що залишилися, за замовчуванням указівкою символу ";"), LINK входить у діалоговий режим і запитує які залишилися невизначеними імена через підказки.

Специфікації імен файлів і опції можуть бути заздалегідь занесені в спеціальний файл відповіді. Ім'я цього файлу з попереднім символом @ і вказівкою шляху пошуку, якщо він потрібен, може бути поміщене в будь-якому місці відповіді на підказку чи командного рядка і трактується так, аби вміст файлу відповіді був безпосередньо вставлений в це місце. Важливо, однак, пам'ятати, що комбінація символів CARRIAGE-RETURN / LINE-FEED у файлі відповіді інтерпретується як ENTER у підказці чи кома в командному файлі. Загальний вид файлу відповіді:

 

<ім'я об'єктного файлу>

[<ім'я виконавчого файлу>]

[<ім'я файлу плану>]

[<ім'я бібліотеки>]

 

Кожна група файлів повинна задаватися на окремому рядку, а файли в групі, якщо їх небагато, повинні розділятися символом +. Якщо група не міститься на одному рядку, в останній позиції рядка повинна стояти ознака продовження - символ +. У будь-якому рядку файла відповіді після символу / можуть бути задані опції LINK. У файлі відповіді можуть бути опущені компоненти, уже визначені відповідями на підказки командним рядком. При виявленні у файлі відповіді символа ; залишок файлу ігноруєть- ся, і невизначені імена, що залишилися установлюються за замовчу- ванням із приведеного вище списку. При використанні файлу відповіді, його вміст видається на консоль у формі підказок. Якщо визначені не усі імена, LINK переходить у діалоговий режим. Якщо файл відповіді не містить комбінації символів CARRIAGE-RETURN / LINE-FEED чи символу ; , LINK видає на консоль останній рядок файлу й очікує натискання ENTER. Ім'я кожного файлу може супроводжуватися інформацією про підрозділ, що містить цей файл, інакше пошук вихідного або файлу створення вихідного файлу, буде здійснюватися в поточному підрозділі. Робота LINK може бути в будь-який момент припинена натисканням клавіш CONTROL-C.

Опції LINK.

Всі опції LINK позначаються попереднім символом /, і можуть бути скорочені довільним чином, але так, щоб код залишався унікальним серед опцій. Нижче приведені описи всіх опцій LINK (у дужках зазначені мінімальні скорочення):

/HELP (HE) - Видати список діючих опцій. Цю опцію не можна використовувати разом з ім'ям файлу.

/PAUSE (P) - Пауза перед записом модуля в EXE-файл (і після запису в MAP-файл, якщо це передбачено). Під час цієї паузи можна при необхідності переставити дискети. Якщо використовується файл VM.TMP, він повинен знаходитися на тій же дискеті, що і EXE-файл.

/EXEPACK (E) - Установити компактний запис послідовностей однакових біт. Такий EXE-файл має менший обсяг і швидше завантажується в пам'ять, але його не можна налагоджувати за допомогою SYMDEB. Опція дає ефект, якщо програма містить довгі потоки ідентичних бітів і вимагає великого числа (більше 500) переміщень при завантаженні.

/MAP (M) - Формувати MAP-файл. Файл формується, навіть якщо він не специфікований при запуску LINK, і має в цьому випадку ім'я, що умовчується, (п.3.2).

/LINENUMBERS (LI) - Зафіксувати в MAP-файлі номера рядків вихідного файлу. Ця інформація може надалі використовуватися MAPSYM і SYMDEB. Запис номерів рядків буде вироблятися, якщо створюється MAP-файл і об'єктний модуль містить дані про рядки вихідного тексту. Компілятори FORTRAN і PASCAL (версії 3.0 і вище), і C (версії 2.0 і вище) такі дані автоматично формують; у MASM це не передбачено. Якщо MAP-файл не специфіковано, його можна створити примусово, вказавши описувану опцію в підказці на цей файл.

/NOIGNORECASE (NOI) - Установити розходження між рядковими і заголовними буквами. Розходження може бути встановлене також опціями /ML і /MX MASM.

/NODEFAULTLIBRARYSEARCH (NOD) - Ігнорувати, що умовчуються бібліотеки, посилання на яких містяться в об'єктному модулі (їх туди поміщають компілятори мов високого рівня). Використовуються тільки бібліотеки, специфіковані при запуску LINK.

/STACK:<число> (ST) - Установити розмір стека (у байтах). Інформація про розмір стека, що міститься в об'єктному модулі, ігнорується. Розмір стека може бути заданий у виді десяткового, 8-ричного (з попереднім 0) чи 16-ричного (с попередніми 0 і x на малому регістрі) числа в межах від 1 до 65535. Розмір стека може бути змінений утилітою EXEMOD.

/CPARMAXALLOC:<число> - Установити максимальне (C) число 16-байтних параграфів, необхідних при завантаженні програми в пам'ять. Звичайно LINK установлює максимальне число параграфів - 65535. Указівка цієї опції дозволяє більш ефективно використовувати пам'ять. Число параграфів може бути задане у виді десяткового, 8-ричного (з попереднім 0) чи 16-ричного (з попередніми 0 і x на малому регістрі) числа в межах від 1 до 65535. Якщо число параграфів недостатнє для розміщення програми, LINK нарощує його до мінімально придатного. Число параграфів може бути змінене утилітою EXEMOD. Крім розміщення програми, опція може знадобитися для команди ! SYMDEB.

/HIGH (H) - Встановити адреса початку програми на найвищий можливий адрес вільної пам'яті. Без цієї опції установка здійснюється на мінімальну можливу адресу.

/DSALLOCATE (D) - Обробити групу з ім'ям DGROUP. Звичайно LINK привласнює молодшому байту групи зсув 0000h. При завданні цієї опції старшому байту групи з ім'ям DGROUP привласнюється зсув FFFFh. У результаті, дані будуть розміщуватися в областях програми з максимально великими адресами. Опція /D звичайно застосовується разом з опцією /H для більш ефективного використання незайнятої пам'яті до старту програми. LINK припускає, що усі вільні байти в DGROUP займають пам'ять безпосередньо перед програмою. Для використання групи необхідно завантажити в регістр сегмента адреса початку DGROUP.

/NOGROUPASSOCIATION - Ігнорувати групи при (NOG) присвоєнні адрес елементам даних і коду. Опція введена для сумісності з ранніми версіями компіляторів FORTRAN і PASCAL (версії MICROSOFT 3.13 і раніше і IBM до 2.0). Не рекомендується використовувати цю опцію в інших цілях.

/OVERLAYINTERRUPT:<число> - Установити номер переривання при (O) завантаженні оверлейного модуля. Зазначене число заміщає номер стандартного оверлейного переривання (03Fh). Номер може бути заданий у виді десяткового, 8-ричного (з попереднім 0) чи 16-ричного (з попередніми 0 і x на малому регістрі) числа в межах від 0 до 255. MASM не сприяє створенню оверлейних програм. Тому тільки за допомогою опції /O асемблерні модулі можуть бути включені в оверлейні програми на мовах високого рівня, компілятори яких піддержують оверлей. Не рекомендується встановлювати номер, що збігається з яким-небудь іншим перериванням.

/SEGMENTS:<число> (SE) - Установити максимальне число сегментів, що може обробити LINK. Число може бути задане в десяткової, 8-ричній (з попереднім 0) чи 16-ричній (з попередніми 0 і x на малому регістрі) формі в межах від 1 до 1024. При відсутності специфікації опції покладається 128. Пам'ять виділяється з обліком цього максимального числа сегментів.

/DOSSEG (DO) - Упорядкувати сегменти в EXE-файлі. При специфікації цієї опції сегменти розташовуються в наступній послідовності: - сегменти з класом CODE; - інші сегменти, що не входять у групу DGROUP; - сегменти, що входять у DGROUP. Звичайна послідовність сегментів при відсутності /DO описана в п.3.4.3.

Особливості роботи LINK.

LINK створює виконавчий файл шляхом конкатенації коду програми і сегментів даних, відповідно коректним інструкціям вихідного тексту. Ця зчеплена форма сегментів і є тим "виконавчим представленням", що безпосередньо копіюється в пам'ять при завантаженні програми. Частково керувати редагуванням програмних сегментів можна завданням атрибутів у директиві SEGMENT, або використанням директиви DGROUP для формування групи сегментів. Ці директиви визначають цілу групу асоціацій, класів і типів вирівнювання, а також визначають порядок і відносні початкові адреси сегментів програми. Ця інформація є додатко- вою до тієї, котра задається опціями LINK.

Вирівнювання сегментів.

Для установки початкової адреси сегмента LINK використовує тип, що задається директивою SEGMENT, вирівнювання: BYTE, WORD, PARA чи PAGE. Ці ключові слова забезпечують вирівнювання початку сегмента відповідно до границі байта, слова (2 байти), параграфа (16 байтів) чи сторінки (256 байтів). За замовчуванням використовується тип PARA. Байти, що пропускаються через вирівнювання, заповнюються війковими нулями.