8. Машинно-орієнтовані мови програмування. Асемблери.
Структура асемблера, перегляди тексту програми та відповідні бази даних.
Асемблер: машинно-орієнтована мова. Основною одиницею в асемблер-програмі є машинна команда (директива асемблера). На її основі будується машинний код.
Директиви асемблера – це команди, що управляють процесом компіляції. На основі директиви асемблера об’єктний код не будується. Кожна машинна команда чи директива записується в один рядок (або в декілька шляхом продовження).
Між кодами операцій і операціями повинен бути щонайменше один " ". Операнди записуються через кому, без проміжків.
ОП1,ОП2 коментар (коментар може починатись або з "*" або з ";")
Помітка – іменує як команди, так дані (символьне ім’я). В асемблері значення символьного імені є адреса. Repeat – символьне ім’я.
Кожне символьне ім’я кодується парою: (база, зміщення), де база - ім’я сегменту програми, в якому це символьне ім’я визначено.
Оскільки ми не можемо знати наперед абсолютну адресу пам’яті ЕОМ, куди завантажується програма, то асемблер виконує початкове присвоєння абсолютної адреси кожного сегменту значення . Реальна адреса формується під час виконання програми шляхом сумування значення регістру та зміщення, а початкові значення регістрів сегментів приписується операційною системою під час завантаження програми.
Асемблер під час обробки програми з кожним сегментом пов’язує лічильник сегменту. Обчислюється як попереднє значення плюс довжина команди. Початкове значення кожного лічильника або встановлюється директивою асемблера.
Оскільки відсутня дисципліна вживання символьних імен, компілятор асемблеру щонайменше двопрохідний:
1. Попередній перегляд тексту: визначення значень символьних імен, їх адреси (сегмент + зміщення).
2. Другий перегляд тексту: Дає можливість перевірити код команди, та вказує адреси операндів.
Але в асемблері існують такі імена та значення, які не можна визначити під час компіляції (абсолютна адреса, ім’я зовнішньої функції). Тому в об’єктному коді резервується місце для операнда, а в результуючий файл, в таблиці модуля вказується зміщення в об’єктному коді, котре треба модифікувати.