Арифметические операции
1) mov AX,op16 - пересылка слов - AX := op16 $@
mov AL,op8 - пересылка байтов - AL := op8 @
mov EAX,op32 - пересылка двойных слов - EAX := op32 @
2) add AX,op16 - сложение слов - AX := AX + op16 @
add AL,op8 - сложение байтов - AL := AL + op8 @
add EAX,op32 - сложение двойных слов - EAX:=EAX + op32 @
3) sub AX,op16 - вычитание слов - AX := AX - op16 @
sub AL,op8 - вычитание байтов - AL := AL - op8 @
sub EAX,op32 - вычитание двойных слов - EAL:= EAX - op32 @
4) mul op16 - умножение слов - (DX,AX) := AX * op16
(первый множитель в AX) DX ¬ старшая часть
AX ¬ младшая часть
mul op8 - умножение байтов - AX := AL * op8
(первый множитель в AL) AH ¬ старшая часть
AL ¬ младшая часть
mul op32 - умножение двойных слов - (EDX,EAX) := EAX * op32
(первый множитель в EAX) EDX ¬ старшая часть
EAX ¬ младшая часть
5) div op16 - деление двойного
слова на слово - DX := (DX,AX) mod op16
AX := (DX,AX) div op16
div op8 - деление на байт - AH := AX mod op8
AL := AX div op8
6) inc op16 - увеличение слова
на 1 (increment) - inc(op16) или
op16 := op16+1
inc op8 - увеличение байта
на 1 (increment) - inc(op8) или
op8 := op8+1
7) dec op16 - уменьшение слова
на 1 (decrement) - dec(op16) или
op16 := op16-1
dec op8 - уменьшение байта
на 1 (decrement) - dec(op8) или
op8 := op8-1
Переходы
1) jmp <метка> - безусловный
переход - goto <метка>
2) cmp op1,op2 - сравнение
j<мнемокод> L1 - условный переход
по результату сравнения на метку L1
E - equal (равно)
N - not (не)
G - greater (больше) - для чисел со знаком
L - less (меньше) - для чисел со знаком
A - above (выше, больше) - для чисел без знака
B - below (ниже, меньше) - для чисел без знака
примеры:
cmp op1,op2 - переход если - if (op1=op2)
je L1 равенство then goto L1
cmp op1,op2 - переход если - if (op1<>op2)
jne L1 неравенство then goto L1
cmp op1,op2 - переход если - if (op1<op2)
jb L1 меньше then goto L1
cmp op1,op2 - переход если - if (op1>=op2)
jea L1 больше либо равно then goto L1
cmp op1,op2 - переход если - if (op1>=op2)
jnb L1 не меньше then goto L1
3) j<мнемокод> - условный переход
по значению флага
jc L1 - если был перенос - if (CF=1) then goto L1
jz L1 - если нуль - if (ZF=1) then goto L1
jo L1 - если переполнение - if (ОF=1) then goto L1
jnc L1 - если нет переноса - if (CF=0) then goto L1
jnz L1 - если не нуль - if (ZF=0) then goto L1
Логические операции (интерес представляет только флаг нуля ZF)
1) not op16 - логическое - not(op16)
отрицание
not op8 - логическое - not(op8)
отрицание
2) and AX,op16 - конъюнкция - AX and op16 @
and AL,op8 - конъюнкция - AL and op8 @
3) test AX,op16 - проверка - аналогична команде AND, но
test AL,op8 - проверка результат никуда не записывается
4) or AX,op16 - дизъюнкция - AX or op16 @
or AL,op8 - дизъюнкция - AL or op8 @
Команды сдвига (интерес представляет только флаг переноса CF, так как в него помещается уходящий бит)
1) shl op16,1 - логический сдвиг - op16 shl 1
shl op8,1 влево на 1 бит - op8 shl 1
(быстрое умножение числа на 2)
CF операнд
0
2) shr op16,1 - логический сдвиг - op16 shr 1
shr op8,1 вправо на 1 бит - op8 shr 1
(быстрое деление числа на 2)
операнд CF
0