Условные переходы
Микропроцессор имеет 18 команд условного перехода (см. “Описание команд”). Эти команды позволяют проверить:
отношение между операндами со знаком (“больше — меньше”);
отношение между операндами без знака (“выше — ниже”)2;
состояния арифметических флагов zf, sf, cf, of, pf (но не af).
Команды условного перехода имеют одинаковый синтаксис:
jcc метка_перехода
Как видно, мнемокод всех команд начинается с “j” — от слова jump (прыжок), cc — определяет конкретное условие, анализируемое командой.
Что касается операнда метка_перехода, то эта метка может находится только в пределах текущего сегмента кода, межсегментная передача управления в условных переходах не допускается. В связи с этим отпадает вопрос о модификаторе, который присутствовал в синтаксисе команд безусловного перехода. В ранних моделях микропроцессора (i8086, i80186 и i80286) команды условного перехода могли осуществлять только короткие переходы — на расстояние от –128 до +127 байт от команды, следующей за командой условного перехода. Начиная с модели микропроцессора 80386 это ограничение снято, но, как видите, только в пределах текущего сегмента кода.
Для того чтобы принять решение о том, куда будет передано управление командой условного перехода, предварительно должно быть сформировано условие, на основании которого и будет приниматься решение о передаче управления.
Источниками такого условия могут быть:
любая команда, изменяющая состояние арифметических флагов;
команда сравнения cmp, сравнивающая значения двух операндов;
состояние регистра ecx/cx.
Обсудим эти варианты, чтобы разобраться с тем, как работают команды условного перехода.