Команды переходов

 

Команды переходов подразделяются на команды безусловных переходов и

условных переходов. Команды безусловных переходов обеспечивают переход на соответствующую команду программы. Этот оператор по своему функциональному назначению соответствует оператору языка Паскаль.

GOTO <метка>

Форматы команд безусловных переходов:

JMP<смещение>- смещение рассматривается как знаковое целое, которое прибавляется с расширением знака до 16 бит к содержимому IP (в IP содержится адрес команды, находящейся после команды JMP);

JMP<адрес>- содержит 4 байта прямого адреса перехода;

JMP mem/reg - реализует косвенный безусловный переход.

Команды условных переходов анализируют некоторое условие, закодированное текущим состоянием флажков, при этом в зависимости от того, удовлетворено условие или нет, переход либо совершается, либо нет. Эти команды позволяют проверить оба состояния практически всех флажков арифметических операций, а также ряд комбинаций состояний нескольких флажков. Если условие истинно, управление передаётся по адресу перехода, если ложно - выполняется следующая по порядку команда. Ниже приводится таблица, в которой перечислены команды условных переходов. Команды условных переходов удобно рассматривать в соответствии со следующей классификацией:

· команды условных переходов для беззнаковых данных;

· команды условных переходов для знаковых данных;

· специальные арифметические проверки.

Употребление терминов "больше" и "меньше" относят к знаковым числам, представленным в дополнительном коде, а "выше" и "ниже" к беззнаковым. Например, число ACh меньше и выше числа 43h. Каждая команда условного перехода имеет две мнемоники, при этом обе мнемоники генерируют одинаковый код. Введение двух мнемонических обозначений одной команды объясняется необходимостью обеспечения определённых удобств для программиста.

Таблица команд условных переходов

№/№ Мнемоника Проверяемое условие Проверяемые флаги
Команды перехода для беззнаковых данных
JE /JZ равно / нуль z
JNE / JNZ не равно / не нуль z
JA / JNBE выше / не ниже или равно z,c
JAE / JNB выше или равно / не ниже c
JB / JNA ниже / не выше или равно c
JBE /JNA ниже или равно / не выше c,a
Команды перехода для знаковых данных
JE / JZ равно / нуль z
JNE / JNZ не равно / не нуль z
JG / JNLE больше / не меньше или равно z,s,o
JGE / JNL больше или равно / не меньше s,o
JL / JNGE меньше / не больше или равно s,o
JLE / JNG меньше или равно / не больше z,s,o
Специальные арифметические проверки
JS есть знак (отрицательное) s
JNS нет знака (положительное) s
JC есть перенос c
JNC нет переноса c
JO есть переполнение o
JNO нет переполнения o
JP / JPE паритет чётный p
JNP / JPO паритет не чётный p

Кроме перечисленных в таблице команд, в число команд условных переходов входит команда JCXZ, которая проверяет, равно ли нулю содержимое регистра CX, и, если равенство подтверждается, совершается переход.