Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
О_ASM_ЛР1т.doc
Скачиваний:
23
Добавлен:
14.02.2015
Размер:
237.57 Кб
Скачать

2.5 Структура програми

У більшості програм, які написані на мові асемблера, можливо виділити основні частини: заголовок, дані, коди програми, закінчення (рис. 2).

Заголовок На початку програми за допомогою псевдооператора Title можна задати ім’я програми, яке буде печататись на кожній сторінці лістингу. Наприклад: Title “Програма 1”. В області заголовка може знаходитися інформація про різновидність асемблера, моделі пам’яті, резервування простору пам’яті для стека інше.

Область даних та тіло програмиОбласть даних та тіло програми можна задати за допомогою директив сегментації. Процесор в режимі і8086 може одночасно працювати з чотирма сегментними регістрами, створюючи відповідні області пам’яті:сегмент коду; сегмент стека; сегмент даних; додатковий сегмент даних. Сегментація може бути пов'язаною з концепцією модульного програмування, уніфікацією оформлення об'єктних модулів, які створюються компілятором, у тому числі з різних мов програмування.

Закінчення Завершує програму на мові асемблера директива END, яка вказує на кінець тексту програми та на мітку, з якої потрібно розпочати виконання програми. Любий текст після закінчення програми ігнорується. Наприклад:

End Start ;кінець програми. Розпочати програму з мітки Start

Рисунок 2 – Структура програми на мові асемблера

2.6 Псевдооператори мови асемблера

2.6.1 Опис сегмента

Основним елементом побудови програми на мові асемблера є сегмент пам’яті, який складається з відкриваючого рядка, тіла сегмента та закриваючого рядка. Відкриваючий рядок містить ім’я сегмента, само слово Segment та додаткові параметри. Закриваючий рядок містить ім’я сегменту та директиву закриття сегменту ENDS. Спрощений синтаксис опису сегмента на асемблері має наступну структуру:

Ім’я_сегмента Segment [тип комбінування] [клас сегмента] [тип розміру сегмента]

Тіло сегменту

Ім’я_сегмента ENDS

Додаткові параметри допомагають прискорити роботу асемблера, але не обов’язкові для використання.

тип комбінування сегментів може бути STACK (визначення сегмента стека) і змушує компоновщик обчислювати адреси в цих сегментах відносно вмісту регістра ss. Якщо не зазначено жодного сегмента стека, компоновщик видасть попередження, що сегмент стека не знайдений.

Функціональне призначення сегментів Директиви сегментації не містять інформації про функціональне призначення сегментів: сегменти коду, даних або стека. Тому транслятору необхідно вказувати про функціональне їх призначення. Для цього використають спеціальну директиву ASSUME, яка повідомляє транслятору про прив'язку сегментів до відповідних сегментних регістрів. Директива ASSUME має наступні формати:

ASSUME nothing та

ASSUME ім’я_сегментного_регістра : ім’я_сегмента, ім’я_сегментного_регістра : ім’я_сегмента, …

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