Команды вычитания SUB, SBB, DEC аналогичны командам ADD, ADC, INC, только производят операцию вычитания, а не сложения.
Команда CMP аналогична команде SUB, но результат не запоминается в приемнике, а устанавливаются только флаги в соответствии с результатом. CMP - это команда сравнения, после которой обычно следует команда условного перехода. Состояние флагов после выполнения команды CMP приведено в таблице 2.7.
Таблица 2.7. Состояние регистра флагов после выполнения команды CMP
Знаковые
Беззнаковые
приемник>источника
ZF=0&SF=OF
CF=0&ZF=0
приемник³источника
SF=OF
CF=0
приемник=источника
ZF=1
ZF=1
приемник£источника
ZF=1&SF¹OF
CF=1&ZF=1
приемник<источника
SF¹OF
CF=1
Команда NEG изменяет знак своего операнда, то есть вычитает значение операнда-приёмника из 0 и тем самым формирует его дополнение до двух. Полезна для вычитания значения регистра или ячейки памяти из непосредственного значения.
Пример:
SUB 100, AL - запрещена
Можно сделать следующее:
NEG AL
ADD AL, 100
NEG - даёт дополнительный код операнда