Когда инструкция 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, да. Для других флагов не обязательно, поскольку вычитание не является коммутативным.

Другие вопросы по тегам