J (E) CXZ обычно используется, когда у вас есть значение счетчика в регистре CX, которое вы используете для ограничения итераций в циклах.
JMP - это безусловный переход, используемый для выхода из циклов, ввода API в интерфейс без CALL, построения таблиц переходов и т. Д.
Условные переходы используются для изменения потока выполнения на основе условий предыдущих вычислений. Есть много синонимов (задокументировано в только что приведенной ссылке), и синонимы обычно по понятным причинам. JAE, например, означает «Прыжок выше или равно». Это синоним для JNC, что означает «Перейти, если нет переноски» и JNB, что означает «Перейти, если не ниже». То, что вы используете, это просто вопрос того, чтобы ваш код был понятен читателю:
- Если вы только что выполнили арифметическую операцию, вас, вероятно, заинтересует состояние флага переноса, поэтому вы закодируете его как JNC.
- Если вы только что провели сравнение (операция CMP), вы, скорее всего, больше будете интересоваться JAE или JNB. То, что вы используете, зависит от того, что имеет смысл при описании логики.
Это на самом деле классическая проблема в языковом дизайне: вы делаете много псевдонимов, усложняете ли синтаксис в пользу уточнения семантики, или вы ограничиваете свои «ключевые слова» (здесь мнемоника кода операции) за счет того, что семантика труднее читать?