Мова програмування Assembler
Методическое пособие - Компьютеры, программирование
Другие методички по предмету Компьютеры, программирование
?очності так само, як і 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 переглядає їх у порядку проходження в рядку.
3. На шляхах, визначених змінної LIB команди DOS SET. За допомогою команди SET можуть бути задані кілька шляхів пошуку, які діляться крапкою з комою. Вид команди SET: SET LIB=.
Лекція 5 Основні поняття мови асемблера Х86
- Будова програми на мові Assembler
- Поняття "сегмент", "регістр", "підпрограмма"
- Граматичні конструкції, які відповідають цим поняттям
- Тип даних в асемблері. Поняття "байт", "півбайт", "слово", та інші
1. Будова програми на мові Assembler
ФОРМАТ КОДУВАННЯ
Основний формат кодування команд асемблера має наступний вигляд:
[мітка] команда [операнд(и)]
Мітка (якщо мається), команда й операнд (якщо мається) pозділяються принаймні одним пробілом або символом табуляції. Максимальна довжина рядка - 132 символи, однак, більшість бажають працювати з рядками в 80 символів (відповідно ширині екрана). Приклади кодування:
Мітка Команда Операнд
COUNT DB 1; Імя, команда, один операнд
MOV AX 0; Команда, два операнда
Мітки
Мітка в мові асемблера може містити наступні символи:
Букви: від A до Z і від a до z.
Цифри: від 0 до 9.
Спецсимволи: знак питання (?) крапка (.) (тільки перший символ) знак "комерційне эт" (@) підкреслення (-) долар ($).
Першим символом у мітці повинна бути буква спецсимвол. Асемблер не робить розходження між заголовними і рядковими буквами. Максимальна до