MOV AХ,DX -- пересилання значення з регістра DX у AX. Тут обоє операнди -- регістрові.
MOV AХ,0000 -- очищення акумулятора.
MOV [0023],AХ -- пересилання вмісту акумулятора в комірку пам'яті за адресою DS:0023. Зверніть увагу на те, що без використання прямокутних дужок ця команда була б безглуздою і транслятор у цьому випадку видав би повідомлення про помилку. Саме використання таких дужок дає можливість трансляторові інтерпретувати перший операнд не як безпосереднє число, а як вміст комірки пам'яті, розташованої за адресою DS:0023. Тобто , число в прямокутних дужках сприймається як зсув логічної адреси комірки пам'яті.
MOV СХ,[0023] -- пересилання вмісту комірки пам'яті за адресою DS:0023 у CX.
2. add < приймач >,< джерело >. Ця команда призначена для додавання двох цілочисельних операндів (джерело і приймач) розмірністю байт, слово або подвійне слово. При цьому результат додавання міститься за адресою першого операнда (приймач).
Наприклад:
ADD DX,03 -- збільшує на 3 значення регістра DX. Операнди тут, як у попередній команді, можуть бути безпосередніми, регістровими і т.д.
3. sub < приймач >,< джерело >. Ця команда призначена для виконання цілочисельного віднімання першого операнда з другого, результат міститься в приймач.
Приклад:
SUB DX,AX - значення регістра DX віднімається з AX, результат міститься в DX.
4. mul <множник_1>. Ця команда виконує множення двох цілих чисел без обліку знака. Алгоритм залежить від формату операнда команди і вимагає явної вказівки місця розташування тільки одного співмножника, що може бути розташований у пам'яті або в регістрі. Місце розташування другого співмножника фіксоване і залежить від розміру першого співмножника:
- якщо операнд, зазначений у команді - байт, то другий співмножник повинний розташовуватися в AL (молодшій половині акумулятора);
- якщо операнд, зазначений у команді - слово, то другий співмножник повинний розташовуватися в AX.
Результат множення міститься також у фіксованому місці, обумовленому розміром співмножників:
- при множенні байтів результат міститься в AX;
- при множенні слів результат міститься в пару DX:AX;
Наприклад:
MUL BL - робить цілочисельне множення без обліку знака вмісту молодшої половини регістра BX на вміст молодшої половини акумулятора. Результат міститься в акумуляторі.
5. dіv < дільник >. Команда виконує операцію цілочисельного ділення двох двійкових беззнакових значень с видачею результату у вигляді частки і залишку від ділення. Для виконання команди необхідне завдання двох операндів - діленого і дільника. Ділене задається неявно і розмір його залежить від розміру дільника, що вказується в команді:
- якщо дільник розміром у байт, то ділене повинно бути розташоване в регістрі AX. Після операції частка міститься в AL, а залишок - у AH;
- якщо дільник розміром у слово, то ділене повинно бути розташоване в парі регістрів DX:AX, причому молодша частина діленого знаходиться в AX. Після операції частка міститься в AX, а залишок - у DX.
Наприклад:
DІV 08 - робить цілочисельне ділення без знака вмісту акумулятора на 08.
Варто пам'ятати, що при виконанні операції ділення можливе виникнення виняткової ситуації: 0 - помилка ділення. Ця ситуація виникає в одному з двох випадків: дільник дорівнює 0 або частка занадто велика для його розміщення в регістрі AX/AL.
6. іnc < операнд >. Команда робить збільшення значення операнда в пам'яті або регістрі на 1. Наприклад:
ІNC BL - збільшує значення, що утримується в молодшій половині регістра BX на 1. Команда може бути корисна при організації циклів.
7. dec < операнд >. Команда робить зменшення значення операнда в пам'яті або регістрі на 1. Наприклад:
DEC BL - зменшує значення, що утримується в молодшій половині регістра BX на 1.
8. pop <приймач>. Команда призначена для добування слова зі стека (вмісту вершини стека) у комірку пам'яті або регістр. Алгоритм роботи:
- завантажити в приймач вміст вершини стека (адресується парою SS:SP);
- збільшити вміст SP на 2 байти.
Варто пам'ятати, що неприпустимий добування слова в сегментний регістр CS.
9. push <джерело>. Команда призначена для розміщення вмісту операнда "джерело" у стеці. Використовується разом з командою РОР для запису значень у стек і добування їх зі стека Алгоритм роботи:
- зменшити значення покажчика стека SP на 2;
- записати джерело у вершину стека (яка адресується парою SS:SP).
У стек можна записувати як вміст регістрів або комірок пам'яті, так і безпосередні значення. На відміну від команди РОР у стек можна включати значення сегментного регістра CS. При записі в стек 8-бітних значень для них усе рівно виділяється слово.
10. ret. Призначена для повернення керування з процедури викликаючої програми. Команда досить багатофункціональна і може мати числовий операнд. У найпростішому випадку може використовуватися без додаткових параметрів як команда завершення програми.
У заключній частині заняття лектор підводить підсумки заняття відповідає на питання курсантів, звертає їх увагу на основні визначення та поняття, які були розглянуті на лекційному занятті, рекомендує, які питання буде доцільно додатково розглянути на самостійній підготовці та повідомляє перелік рекомендованої літератури. Крім того, лектор повідомляє курсантам тему наступного заняття та форму проведення поточного контролю на ньому.
В И С Н О В О К
Усі процеси в машині на найнижчому, апаратному рівні приводяться в дію тільки командами (інструкціями) машинної мови. Сукупність команд, що можуть бути виконані конкретним мікропроцесором, називається системою команд мікропроцесора.
Мікропроцесори, що належать до різних сімейств, мають, відповідно, свої, що істотно розрізняються системи команд. Система команд МП ІA‑32 передбачає 11 режимів адресації, у більшості з яких зсув є лише одним з компонентів, використовуваних для обчислення ефективної адреси.
При цьому тільки в двох випадках операнди не зв'язані з пам'яттю. Це операнд - вміст регістра, що береться з будь-якого регістра процесора і безпосередній операнд, що утримується в самій команді. Інші дев'ять режимів так чи інакше звертаються до пам'яті.
Мова асемблер для кожного типу комп'ютера своя. Знання мови асемблер і результуючого машинного коду дає розуміння архітектури ЕОМ, що не забезпечується при програмуванні мовою високого рівня. Мови високого рівня створювалися для того, щоб програмувати переважно без обліку технічних особливостей конкретних комп'ютерів, асемблер же орієнтований саме на специфіку комп'ютера або, точніше, на специфіку процесора.