Смекни!
smekni.com

Мова програмування Assembler (стр. 5 из 21)

Якщо задана опція /MAP, у файл включаються імена загальних символів і їхні завантажувальні адреси. Якщо задані опції /HIGH чи /DSALLOCATE і обсяг програми та даних у сукупності не перевищує 64ДО, план може містити символи з незвичайно великими адресами сегментів. Ці адреси відбивають змінні, розташовані нижче дійсного початку сегмента.

Приклад:

FFF0:0A20 TEMP

Адреса TEMP - 00:920h.

Необхідно мати те, через що, крім двох вихідних файлів, LINK може формувати тимчасовий файл з ім'ям VM.TMP. Це відбувається в тому випадку, коли лінкеру не вистачає оперативної пам'яті. Створення файлу VM.TMP супроводжується повідомленням на консолі і завжди здійснюється у поточному підзаголовку. У цьому випадку не можна використовувати опцію /PAUSE і знімати дискету, якщо вона знаходиться на активному драйві, до того, як LINK не знищить файл VM.TMP. Не реко- мендується створювати в поточному підзаголовку файл із таким ім'ям, що у цьому випадку може бути зіпсований.

3. Запуск 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.