Рубрики
Справочник по ассемблеру

CMP

СинтаксисCMP приёмник,источник
Машинный
код
3C ib — CMP AL,imm8
3D iw — CMP AX,imm16
3D id — CMP EAX,imm32
80 /7 ib — CMP r/m8,imm8
81 /7 iw — CMP r/m16,imm16
81 /7 id — CMP r/m32,imm32
83 /7 ib — CMP r/m16,imm8
83 /7 ib — CMP r/m32,imm8
38 /r — CMP r/m8,r8
39 /r — CMP r/m16,r16
39 /r — CMP r/m32,r32
3A /r — CMP r8,r/m8
3B /r — CMP r16,r/m16
3B /r — CMP r32,r/m32
ОписаниеСравнение.
ДействиеИнструкция CMP сравнивает 2 операнда. Основное применение инструкции – проверка условий в циклах. CMP вычитает один операнд от другого, затем сравнивает, являются операнды равными или нет (см. команда SUB). Исходные операнды не меняются. Также используется для условных переходов по меткам.
ФлагиOF=r SF=r ZF=r AF=r PF=r CF=r

Пример использования инструкции CMP:

CMP часто используется для сверки счетчика, то есть сравнения числа повторений цикла с условием. Рассмотрим типичный случай:

Рубрики
Справочник по ассемблеру

SBB

СинтаксисSBB приемник,источник
Машинный
код
1C ib — SBB AL,imm8
1D iw — SBB AX,imm16
1D id — SBB EAX,imm32
80 /3 ib — SBB r/m8,imm8
81 /3 iw — SBB r/m16,imm16
81 /3 id — SBB r/m32,imm32
83 /3 ib — SBB r/m16,imm8
83 /3 ib — SBB r/m32,imm8
18 /r — SBB r/m8,r8
19 /r — SBB r/m16,r16
19 /r — SBB r/m32,r32
1A /r — SBB r8,r/m8
1B /r — SBB r16,r/m16
1B /r — SBB r32,r/m32
ОписаниеВычитание с заёмом.
ДействиеВычитание двух целочисленных двоичных операндов с учётом флага CF.
ФлагиOF=r SF=r ZF=r AF=r PF=r CF=r

Команда SBB дополняет команду SUB при выполнени вычитания чисел частями. Состояние флага CF представляет собой заём от предыдущего вычитания. Приёмник = приёмник — (источник + CF)

Пример использования команды SBB для вычитания операнда размером в слово (2 байта) из двойного слова (4 байта):