Условный переход на основе команды CMP

Флаги, устанавливаемые командой CMP, можно анализировать специальными командами условного перехода:

Jxx <метка>

где операнд указывает метку той команды программы, на которую надо сделать переход в случае выполнения некоторого условия.

Мнемокод начинается буквой J (от jump), за которой следует одна или несколько букв, в сокращенном виде описывающих это условие. Одна и та же команда условного перехода может иметь в языке ассемблера несколько названий-синонимов (например, «меньше» - «не верно, что больше или равно»).

В таблице 4.1 приведены значения аббревиатур в названии команд условного перехода.

Таблица 4.1.

Значение аббревиатур в названии команд условного перехода.

Мнемоническое обозначение Английский Русский Тип операндов
E e equal Равно Любые
N n not Не Любые
G g greater Больше Числа со знаком
L l less Меньше Числа со знаком
A a above выше, в смысле “больше” Числа без знака
B b below ниже, в смысле “меньше” Числа без знака
AE ae above or equal выше или равно  
GE ge greater than or equal больше или равно  

Замечание. Для условий «меньше» и «больше» введены две системы обозначений, так как после сравнения чисел со знаком и сравнения чисел без знака надо реагировать на разные значения флагов.

В таблице 4.2 приведены названия всех команд условного перехода, используемых после команды сравнения (через косую черту указаны названия-синонимы).

Таблица 4.2.

Перечень команд условного перехода для команды CMPdst, src

Типы операндов Мнемокод команды условного перехода Критерий условного перехода Значения флагов для осуществления перехода
Любые je dst = src zf = 1
Любые jne dst<>src zf = 0
Со знаком jl/jnge dst < src sf <> of
Со знаком jle/jng dst <= src sf <> of or zf = 1
Со знаком jg/jnle dst > src sf = of and zf = 0
Со знаком jge/jnl dst => src sf = of
Без знака jb/jnae dst < src cf = 1
Без знака jbe/jna dst <= src cf = 1 or zf=1
Без знака ja/jnbe dst > src cf = 0 and zf = 0
Без знака jae/jnb dst => src cf = 0

Examle 4.2.Пусть X, Y, Z - -переменные размером в слово. Записать в Z значение максимального из чисел X и Y.

Решение этой задачи различно для чисел со знаком (см. слева) и для чисел без знака (см. справа), т. к. приходится использовать разные команды условного перехода:

;числа со знаком ;числа без знака
  MOV АХ, Х     MOV АХ, Х
  СМР AX, Y ; х=у?   СМР AX, Y ;х = у ?
  JGE М ; если х >= у, то метка M   JAE M
  MOV AX, Y     MOV AX, Y
M: MOV Z, AX   M: MOV Z, AX

Наши рекомендации