Мова програмування Assembler

Методическое пособие - Компьютеры, программирование

Другие методички по предмету Компьютеры, программирование

?гнорувати групи при (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. Байти, що пропускаються через вирівнювання, заповнюються війковими нулями.

Номер кадру.

Якщо обчислюється 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 у ?/p>