Узгодження

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

1. Короткі.

2. Внутрішні щодо себе.

3. Внутрішні щодо сегмента.

4. Довгі.

Розмір значення, що обчислюється, залежить від типу посилання. Якщо LINK виявляє помилку в передвіщеному розмірі посилання, видається повідомлення про переповнення узгодження. Це може відбутися, наприклад, коли програма намагається використовувати 16-бітовий зсув для доступу до інструкції в сегменті, що має інша адреса кадру. Це ж повідомлення може бути видано, якщо всі сегменти в групі не містяться усередині блоку пам'яті в 64ДО. Коротке посилання має місце в інструкції JMP, воно передає керування на позначену інструкцію в тому ж сегменті групи, що відстає від JMP не більш, ніж на 128 байтів. Для такого посилання LINK виробляє 8-бітове число зі знаком. Якщо інструкція, на яку передається керування, знаходиться в іншому сегменті чи групі, тобто має іншу адресу кадру, або відстає більш, ніж на 128 байтів у будь-якому напрямку, формується повідомлення про помилку.

Внутрішнє щодо себе посилання має місце в інструкціях, що адресують дані до того ж сегмента чи групи. Для такого посилання LINK формує 16-бітовий зсув. Якщо дані не належать тому ж сегменту чи групі, видається повідомлення про помилку. Внутрішнє щодо сегмента посилання має місце в інструкціях, що адресує дані у визначеному сегменті чи групі щодо зазначеного регістра сегмента. Для цього посилання LINK виробляє 16-бітовий зсув. Якщо цей зсув усередині специфікованого кадру виявляється більшим 64ДО і менше 0, чи якщо початок канонічного кадру, утримуючого необхідні дані – без адресації: видається повідомлення про помилку. Довге посилання має місце в інструкціях CALL, передавальних керування в інший сегмент чи групу. LINK у цьому випадку виробляє 16-бітову адресу кадру і 16-бітовий зсув. Якщо обчислений зсув більше 64ДО і менше 0, чи якщо початок канонічного кадру, у який передається керування – без адреси, формується повідомлення про помилку.

Пошук бібліотек.

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

1. У поточному підоголошенні.

2. Якщо в командному рядку задані один чи трохи більше шляхів пошуку для інших бібліотек, LINK переглядає їх у порядку проходження в рядку.

3. На шляхах, визначених змінної LIB команди DOS SET. За допомогою команди SET можуть бути задані кілька шляхів пошуку, які діляться крапкою з комою. Вид команди SET: SET LIB=<список шляхів>.


Лекція 5 Основні поняття мови асемблера Х86

1. Будова програми на мові Assembler

2. Поняття "сегмент", "регістр", "підпрограмма"

3. Граматичні конструкції, які відповідають цим поняттям

4. Тип даних в асемблері. Поняття "байт", "півбайт", "слово", та інші

1. Будова програми на мові Assembler