Команды вычитания 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 - даёт дополнительный код операнда