![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
В системе команд микропроцессора есть более 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!