Когда инструкция cmp изменяет флаг zf? [x86 MASM]
Учитывая, что "... флаг Zero (ZF) устанавливается, когда результат арифметической или логической операции генерирует результат нуля", как инструкция cmp взаимодействует с ZF?
Учитывая следующий фрагмент кода,
mov eax, 0
mov edx, 1
cmp eax, edx
как cmp оценивает два операнда и на что настроен ZF? Если операнды были обращены (cmp edx, eax), тогда ZF установлен на то же значение, что и в исходном операторе?
Если бы я сравнил два одинаковых значения, как cmp оценивает операнды и на что настроен ZF?
cmp eax, eax
1 ответ
как cmp оценивает два операнда?
Прямо из руководства:
Сравнение выполняется путем вычитания второго операнда из первого операнда, а затем установки флагов состояния таким же образом, как инструкция SUB.
Если операнды были обращены (cmp edx, eax), тогда ZF установлен на то же значение, что и в исходном операторе?
Для ZF, да. Для других флагов не обязательно, поскольку вычитание не является коммутативным.