Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Условные переходы



В системе команд микропроцессора есть более 30 команд, управляющих переходами на метки по условию. Мнемокод этих команд: jc метка, jcc метка, jccc метка и jcccc метка, где j от слова jump (прыжок), а с, сс, ссс и сссс – определяют конкретные условия. Метка может находиться только внутри текущего сегмента кода.

При выполнении команды условного перехода проверяются:

- или отношение между операндами со знаком («больше - меньше»);

- или отношение между операндами без знака («выше – ниже»);

- или состояния арифметических флагов: zf (zero flag – флаг нуля), sf (sign flag – флаг знака), cf (carry flag – флаг переноса), of (overflow flag – флаг переполнения), pf (parity flag – флаг паритета);

- или равно ли (неравно) нулю содержимое регистра ecx/cx.

Итак, источниками условия могут быть:

- команда, изменяющая состояние флагов. Команды условного перехода и состояния флагов показаны в таблице 1.

- команда сравнения cmp операнд_1 операнд_2 вычитает операнд_2 из

операнда_1 и по результату вычитания устанавливает флаги. Команды

условного перехода для команды cmp представлены в таблице 2.

- содержимое регистра ecx/cx. Синтаксис команды условного перехода с использованием регистров ecx/cx следующий:

jcxz метка - переход, если в сх ноль;

jecxz метка - переход, если в eсх ноль.


Таблица 1.

Название флага Номер бита в регистре eflags/flags Команда условного перехода Значение флага для осуществле- ния перехода
Флаг переноса cf   jc cf = 1
Флаг четности рf   jp pf = 1
Флаг нуля zf   jz zf = 1
Флаг знака sf   js sf = 1
Флаг переполнения of   jo of = 1
Флаг переноса cf   jnc cf = 0
Флаг четности рf   jnp pf = 0
Флаг нуля zf   jnz zf = 0
Флаг знака sf   jns sf = 0
Флаг переполнения of   jno of = 0

Таблица 2.

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




Дата публикования: 2014-12-10; Прочитано: 344 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2025 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.204 с)...