Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по ЭВМ и ПУ.doc
Скачиваний:
64
Добавлен:
16.03.2015
Размер:
1.16 Mб
Скачать

2.5.4.2. Команды условных переходов.

Команды условных переходов вместе с командой CMP реализуют передачу управления в зависимости от отношения между двумя числами. Сначала процессор выполняет команду сравнения и устанавливает по результату флаги, а затем выполняет команду условного перехода, которая проверяет флаги и производит переход, если числа удовлетворяют заданному отношению. Числа могут проверяться на равенство или требуется узнать, какое из них больше или меньше. Какое число больше 11111111 или 00000000? Если число без знака, то первое = 255, а второе = 0 и первое больше второго. Если число со знаком, то первое = (-1) и меньше второго. Следовательно, отношения “меньше” или “больше” зависят от того, знаковые или беззнаковые числа. Поэтому целесообразно ввести новые термины, позволяющие различать эти два случая. При сравнении знаковых чисел пользуемся терминами “больше” и “меньше”, а при сравнении беззнаковых чисел терминами “выше” и “ниже” (так как беззнаковые числа обычно используются для сравнения адресов). Каждое из условий можно определить по состояниям флагов, поэтому в микропроцессоре есть команды, ориентированные на проверку отношений и команды, ориентированные на проверку состояния флагов. Перечень команд условных переходов приведен в таблице 2.14.

Таблица 2.14. Перечень команд условных переходов.

Команда

Описание

Состояние флагов

JE / JZ

Перейти, если равно / если ноль

ZF = 1

JNE / JNZ

Перейти, если не равно / если не ноль

ZF = 0

JL / JNGE

Перейти, если меньше / если не больше и не равно

SF  OF

JNL / JGE

Перейти, если не меньше / если больше или равно

SF = OF

JG / JNLE

Перейти, если больше / если не меньше и не равно

ZF = 0 & SF = OF

JNG / JLE

Перейти, если не больше / если меньше или равно

ZF = 1 & SF  OF

JB / JNAE

Перейти, если ниже / если не выше и не равно

CF = 1

JNB / JAE

Перейти, если не ниже / если выше или равно

CF = 0

JA / JNBE

Перейти, если выше / если не ниже и не равно

CF = 0 & ZF = 0

JNA / JBE

Перейти, если не выше / если выше или равно

CF = 1 & ZF = 1

JC / JNC

Перейти, если есть перенос / если переноса нет

CF = 1 / CF = 0

JS / JNS

Перейти, если есть знак / если нет знака

SF = 1 / SF = 0

JO / JNO

Перейти, если переполнение / если не переполнение

OF = 1 / OF = 0

JP / JNE

Перейти, если есть паритет / если паритет четный

PF = 1

JNP / JPO

Перейти, если паритета нет / если паритет нечетный

PF = 0

JCXZ

Перейти, если CX = 0

CX = 0

JECXZ

Перейти, если ECX = 0

CX = 0

Команды условного перехода могут использоваться не только с командой CMP, но и с любой другой командой, воздействующей на флаги. Каждая из команд условного перехода в 80286 состоит из 8-битного кода операции и 8-бит, определяющих место перехода (то есть имеет размер 2 байта). 8 бит определяют относительное смещение места перехода и команды условного перехода, то есть в диапазоне -128 +127 байт от команды. “Близкий” или “далёкий” условный переход всегда можно сделать при помощи двух команд: “короткого” условного перехода и “близкого” или “далёкого” безусловного перехода. В микропроцессоре 80386 команды условного перехода могут быть с типом NEAR.