Учебное пособие: Програмування універсальних мікропроцесорів на мовах Асемблер
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 <джерело> . Команда призначена для розміщення вмісту операнда "джерело" у стеці. Використовується разом з командою РОР для запису значень у стек і добування їх зі стека Алгоритм роботи: