Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Номер кадру




Якщо обчислюється LINK початкова адреса сегмента залежить від типу вирівнювання сегмента і розмірів уже скопійованих у виконавчий файл сегментів. Ця адреса складається із зсуву і канонічного номера кадру. Канонічна адреса кадру визначає адреса першого параграфа в пам'яті, що містить один чи більш байтів сегмента. Номер кадру завжди кратний 16. Зсувом є відстань у байтах від початку параграфа до першого байта сегмента. Для типів PAGE і PARA зсув завжди нульовий, а для типів BYTE і WORD може бути ненульовим. Номер кадру може бути отриманий з MAP-файлу. Його містять перші 5 16-ричних цифр start-адреси сегмента.

Послідовність сегментів.

LINK копіює сегменти у виконавчий файл в такій же послідовності, у якій він їх зчитує з об'єктних файлів. Сегменти, що мають ідентичні імена класів, вважаються приналежними до одного типу класів і копіюються в виконавчий файл як безупинний блок. Порядок завантаження сегментів і способи керування цим порядком шляхом присвоювання типів класів обговорюються в п.3.4.3 MICROSOFT MACRO ASSEMBLER REFERENCE MANUAL.

Комбіновані сегменти.

Для визначення того, чи будуть два або більше сегментів, які мають те саме ім'я, з'єднані в один великий сегмент, LINK використовує комбінації типів сегментів. У мові асемблера маються наступні типи комбінацій: PUBLIC, STACK, COMMON, MEMORY, AT і PRIVATE (п.3.4.2 MICROSOFT MACRO ASSEMBLER REFERENCE MANUAL). Якщо сегмент має тип комбінації PUBLIC, LINK автоматично з'єднує його з іншими сегментами, що мають те ж ім'я і приналежні до того ж класу. При з'єднанні сегментів передбачається, що сегменти безупинні і всі адреси в сегментах доступні через зсув відносно адреси кадру. Результат виходить таким же, як якби отриманий великий сегмент був визначений у вихідному файлі суцільним шматком. LINK зберігає тип вирівнювання кожного сегмента. Це означає, що, хоча сегменти і включені в один великий сегмент, код і дані сегментів зберігають свої типи вирів- нювання. Якщо розміри сегментів, що з'єднуються, перевищують 64ДО, видається повідомлення про помилку. Якщо сегмент має тип комбінації STACK, LINK виконує ту ж операцію, що й у випадку PUBLIC. Розходження полягає в тому, що для STACK-сегментів у виконавчий файл записується початкове значення покажчика стека, яке являє собою зсув від кінця першого по порядку сегмента або стека комбінованого сегмента.

У цьому випадку при використанні типу STACK для сегментів стека програмісту немає необхідності передбачати в програмі завантаження регістра SS. Якщо сегмент має тип комбінації COMMON, LINK автоматично з'єднує його з іншими сегментами, що мають те ж ім'я і приналежними до того ж класу. Однак, коли LINK з'єднує загальні сегменти, початок кожного сегмента встановлюється на одну адресу, у результаті чого утворяться серії сегментів, що перекриваються. У підсумку виходить один сегмент, що по довжині не перевищує самий довгий з комбінуючих сегментів. Сегменти з типом комбінації MEMORY трактуються LINK у точності так само, як і PUBLIC-сегменти. MASM забезпечує MEMORY для сумісності з лінкерами тип, що виділяє MEMORY як особливий тип комбінації. Сегмент має тип комбінації PRIVATE у тому випадку, коли у вихідному файлі немає точних указівок відносно його типу комбінації. LINK не поєднує PRIVATE-сегменти.

Групи.

Об'єднання декількох сегментів у групу дозволяє адресувати їх щодо однієї адреси кадру. При цьому неважливо, чи належать ці сегменти до одного класу. Коли LINK виявляє групу, він відповідним чином перебудовує всі адресні посилання в ній. Сегменти в групі не є суміжними, не належать до одного класу і мають різні типи комбінацій. Але сумарний обсяг усіх сегментів у групі не повинний перевищувати 64ДО.Групи не впливають на порядок завантаження сегментів у пам'ять. Навіть якщо використовуються імена класів і об'єктні файли вводяться у відповідній послідовності, немає гарантії, що сегменти будуть суміжними. На практиці LINK може помістити не приналежній групі сегмент у ті ж 64ДО пам'яті. Хоча в LINK і немає строгої перевірки того, чи містяться усі сегменти групи в 64ДО пам'яті, але при виявленні порушення цієї умови буде видане повідомлення про переповнення узгодження.





Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 485 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Начинайте делать все, что вы можете сделать – и даже то, о чем можете хотя бы мечтать. В смелости гений, сила и магия. © Иоганн Вольфганг Гете
==> читать все изречения...

2312 - | 2095 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.009 с.