Учебное пособие: Програмування універсальних мікропроцесорів на мовах Асемблер
Можливо провести наступну класифікацію операндів:
- постійні або безпосередні операнди,
- адресні операнди,
- переміщувані операнди,
- лічильник адреси,
- регістровий операнд,
- базовий і індексний операнди,
- структурні операнди,
- записи.
Перелічимо тепер можливі типи операторів асемблера.
- арифметичні оператори,
- оператори зсуву,
- оператори порівняння,
- логічні оператори,
- індексний оператор,
- оператор перевизначення типу,
- оператор перевизначення сегмента,
- оператор іменування типу структури,
- оператор одержання сегментної складової адреси виразу,
- оператор одержання зсуву виразу.
Операнди та операнди – це складові частини виразів. Вирази являють собою комбінації операндів і операторів, розглянуті як єдине ціле.
Результатом обчислення виразу може бути адреса деякої комірки пам'яті або деяке константне (абсолютне) значення.Як і в мовах високого рівня, виконання операторів асемблера при обчисленні виразів здійснюється відповідно до їх пріоритетів. Операції з однаковими пріоритетами виконуються послідовно зліва на право. Зміна порядку виконання можлива шляхом розміщення круглих дужок, що мають найвищий пріоритет.
Розглянемо декілька базових операторів найбільш простих і розповсюджених типів, що дозволяють створювати найпростіші програми. Усі приклади подані для реального режиму роботи МП ІA-32. Крім того, усі числа в цих прикладах є шістнадцятковими, однак буква h наприкінці числа опущена, а також не використовуються мітки й імена констант і змінних.
1. mov < операнд призначення (приймач) >, < операнд – джерело > . Це -- основна команда пересилання даних загального призначення. Вона реалізує найрізноманітніші варіанти пересилання.
Наприклад:
MOV AL,03 - помістити число 03 у молодшу половину (байт) регістра АХ. Тут 03 - безпосередній операнд, а AL - регістровий операнд. Регістровий операнд -- це просте ім'я регістра. У програмі на асемблері можна використовувати імена всіх регістрів загального призначення і більшості системних регістрів.
MOV AХ,DX -- пересилання значення з регістра DX у AX. Тут обоє операнди -- регістрові.
MOV AХ,0000 -- очищення акумулятора.
MOV [0023],AХ -- пересилання вмісту акумулятора в комірку пам'яті за адресою DS:0023. Зверніть увагу на те, що без використання прямокутних дужок ця команда була б безглуздою і транслятор у цьому випадку видав би повідомлення про помилку. Саме використання таких дужок дає можливість трансляторові інтерпретувати перший операнд не як безпосереднє число, а як вміст комірки пам'яті, розташованої за адресою DS:0023. Тобто , число в прямокутних дужках сприймається як зсув логічної адреси комірки пам'яті.