Системне програмування

8. Машинно-орієнтовані мови програмування. Асемблери.
Структура асемблера, перегляди тексту програми та відповідні бази даних.

Асемблер: машинно-орієнтована мова. Основною одиницею в асемблер-програмі є машинна команда (директива асемблера). На її основі будується машинний код.

Директиви асемблера – це команди, що управляють процесом компіляції. На основі директиви асемблера об’єктний код не будується. Кожна машинна команда чи директива записується в один рядок (або в декілька шляхом продовження).

Між кодами операцій і операціями повинен бути щонайменше один " ". Операнди записуються через кому, без проміжків.

ОП1,ОП2 коментар (коментар може починатись або з "*" або з ";")

Помітка – іменує як команди, так дані (символьне ім’я). В асемблері значення символьного імені є адреса. Repeat – символьне ім’я.

 
Repeat
дані
MAX
Сегмент команд
Сегмент даних
Стек
Сегмент
Кожне символьне ім’я кодується парою: (база, зміщення), де база - ім’я сегменту програми, в якому це символьне ім’я визначено.

Оскільки ми не можемо знати наперед абсолютну адресу пам’яті ЕОМ, куди завантажується програма, то асемблер виконує початкове присвоєння абсолютної адреси кожного сегменту значення . Реальна адреса формується під час виконання програми шляхом сумування значення регістру та зміщення, а початкові значення регістрів сегментів приписується операційною системою під час завантаження програми.

Генерація машиного коду
Вхідна програма
Синтаксичний аналізатор
Семантичний аналізатор
Лексичний аналізатор
Мовні таблиці ассемблеру
Асемблер під час обробки програми з кожним сегментом пов’язує лічильник сегменту. Обчислюється як попереднє значення плюс довжина команди. Початкове значення кожного лічильника або встановлюється директивою асемблера.


Оскільки відсутня дисципліна вживання символьних імен, компілятор асемблеру щонайменше двопрохідний:

1. Попередній перегляд тексту: визначення значень символьних імен, їх адреси (сегмент + зміщення).

2. Другий перегляд тексту: Дає можливість перевірити код команди, та вказує адреси операндів.

Але в асемблері існують такі імена та значення, які не можна визначити під час компіляції (абсолютна адреса, ім’я зовнішньої функції). Тому в об’єктному коді резервується місце для операнда, а в результуючий файл, в таблиці модуля вказується зміщення в об’єктному коді, котре треба модифікувати.



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: