OP2 ® OP1
) INC OP1; OP1 +1 ® OP1
В Асемблері команда вирахування:
) SUB OP1, OP2; OP1-OP2 ® OP1
) SBB OP1, OP2; OP1-OP2-CF ® OP1
3) DEC OP1; OP1 - 1 ® OP1.
Приклади:
X=1234AB12h, Y=5678CD34h, + Y=
MOV AX, 1234hBX, AB12hCX, 5678hDX, CD34hBX, DXAX, CX-Y=SUB BX, DXAX, CX
У командах додавання і віднімання можна використовувати будь-які способи адресації. Команди додавання і віднімання змінюють вміст прапорів
OF, CF, SF, ZF, AF, PF.
Прімер1:
AL, 95hAL, 82h
h + 82h=117h
=10010101 2 82=10000010 2
2 +10000010 2=100010111 2,
CF=1, OF=1, SF=0, ZF=0, AF=0, PF=1.
Приклад2:
AL, 9hAL, 5h
- 5=4 травня=00000101 - 5=11111011 9=00001001
+ (-; 5)=11111011 + 00001001=100000100
CF=1, OF=0, SF=0, ZF=0, AF=1, PF=0.
Множення і ділення в Асемблері
Множення беззнакових чисел.
OP2; OP2 * (AL)? (AX)? (EAX) ® AX? DX: AX? EAX.
Множення знакових чисел.
IMUL OP2; аналогічно MUL
IMUL OP1, OP2
OP1 - це завжди регістр, OP2 - безпосередній операнд, регістр або пам'ять.
При множенні результат має подвоєний формат стосовно співмножником. Іноді точно відомо, що результат може вміститися в формат сомножителей, тоді його можна витягати з AL, AX, EAX.
Розмір результату можна з'ясувати за допомогою прапорів OF і CF.
Якщо OF=CF=1, то результат займає подвійний формат,
і OF=СF=0 в іншому випадку. Решта прапори не змінюються.
Ділення беззнакових чисел:
DIV OP2; OP2 це r? m
Ділення знакових чисел.
OP2; OP2 це r? m
В результаті виконання цих команд вміст регістрів
(AX)? (DX: AX)? (EDX: EAX) ділиться на вказаний операнд і результат поміщається в AL? AX? EAX, залишок поміщається в AH? DX? EDX. Значення прапорів не змінюється, але може настати поділ на нуль, або переповнення, наприклад:
AX, 600
MOV BH, 2
DIV BH; 300 не вміщується в AL, буде повідомлення про помилку
Наведемо приклад програми з використанням команд розподілу: цифри цілого беззнакового байтового числа N записати в байти пам'яті, починаючи з адреси D як символи.
Якщо цифри тризначного числа позначити буквами a, b, c - N (abc), то отримати їх можна за формулами:
=N mod 10=(N div 10) mod 10=(N div 10) div 10
Перевести цифру в символ можна так: код (i)=код (0) + I, тоді фрагмент програми може бути таким:
------------------ ...