47621 (Мова програмування Assembler), страница 4

2016-07-30СтудИзба

Описание файла

Документ из архива "Мова програмування Assembler", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "книги и методические указания", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "47621"

Текст 4 страницы из документа "47621"

[]

[]

[]

Кожна група файлів повинна задаватися на окремому рядку, а файли в групі, якщо їх небагато, повинні розділятися символом +. Якщо група не міститься на одному рядку, в останній позиції рядка повинна стояти ознака продовження - символ +. У будь-якому рядку файла відповіді після символу / можуть бути задані опції 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. Байти, що пропускаються через вирівнювання, заповнюються війковими нулями.

Номер кадру.

Якщо обчислюється 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ДО пам'яті, але при виявленні порушення цієї умови буде видане повідомлення про переповнення узгодження.

Узгодження.

Коли в процесі роботи, 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 переглядає їх у порядку проходження в рядку.

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5193
Авторов
на СтудИзбе
434
Средний доход
с одного платного файла
Обучение Подробнее