Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции препода / Лекции для 3 курса.doc
Скачиваний:
82
Добавлен:
30.04.2013
Размер:
1.51 Mб
Скачать

Лекция 8. Команды условной передачи управления

В процессоре 80286 имеются команды условных переходов, которые совместно с командами сравнения СМР находят отношение между двумя числами. Определение отношения осуществляется в два этапа. Сначала процессор выполняет команду сравнения, которая производит вычита­ние двух чисел, устанавливает по результату флажки и уничтожает разность. Затем он выполняет команду условного перехода, которая проверяет флажки и производит переход, если флажки показывают, что числа удовлетворяют заданному отношению. Предположим, например, что необходимо выполнить конкретные команды, если число в регистре ВН равно числу в регистре BL:

1. Сравнить содержимое регистров ВН с BL (устанавливаются флажки).

2. Перейти к шагу 5, если ZF = 0.

3. Специальные команды ...

4. ... выполняемые, если содержимое регистра ВН равно содержимому регистра BL.

5. ...

В этом примере по команде сравнения производится вычитание значения содержимого регистра BL из значения в регистре ВН и по ре­зультату устанавливаются флажки. Если ВН = BL, то результат равен нулю и флажок ZF устанавливается в 1. Следовательно, проверка на равенство заключается в проверке состояния флажка ZF и именно это делает команда условного перехода на шаге 2: если ВН BL, ZF = 0 и шаги 3 - 4 пропускаются.

Каждая из команд условного перехода состоит из 8-битного кода операции и 8 бит, определяющих назначение перехода. Оно равно разнос­ти между смещением назначения и смещением команды условного перехода. Как мы уже говорили, это ведет к позиционно-незавиеимому коду (переходы относительны) и к компактному коду (назначение определяется всего 8 битами). Но при этом назначение перехода будет в сравнительно небольшом диапазоне (примерно 127 байт) от команды условного перехода. Для двух форм команд условных переходов ("близ­кая" и "далекая") потребовалось бы слишком много кодов операций. Случай "близкого" перехода встречается гораздо чаще, поэтому было решено выбрать этот вариант ("далекий" условный переход всегда можно осуществить двумя командами, в которых "близкий" условный переход обходит "далекий" безусловный переход).

Кроме проверки на равенство часто нужно знать, какое число боль­ше, и при этом возникает интересный вопрос: является ли число 1111 1111 больше числа 0000 0000? Ответ может быть и положительным и отрица­тельным. Если числа считать беззнаковыми, то первое число равно 255 и оно, конечно, больше 0. Но если числа считать знаковыми, то первое число равно -1, т.е. меньше 0. Следовательно, отношение "больше" и "меньше" зависит от того, считаются числа беззнаковыми или знаковы­ми, и целесообразно ввести новые термины, позволяющие различать эти два случая. При сравнении чисел как знаковых мы пользуемся терми­нами меньше и больше, а при сравнении беззнаковых чисел - терминами ниже и выше. Поэтому число 1111 1111 выше числа 0000 0000 и одновре­менно меньше его. А число 0000 0000 ниже и меньше числа 0000 0001.

Следовательно, между двумя числами существуют отношения равны, выше, ниже, меньше и больше. Каждое из этих условий можно определить по

состояниям флажков после команды сравнения (см. табл. 3.9). В процес­соре 80286 имеются команды условных переходов, которые проверяют по состояниям флажков, удовлетворяется конкретное отношение или нет. Имеются следующие условные переходы:

Название

Смысл

JE

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

JNE

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

JL

Перейти, если меньше

JNL

Перейти, если не меньше

JG

Перейти, если больше

JNG

Перейти, если не больше

JB

Перейти, если ниже

JNB

Перейти, если не ниже

JA

Перейти, если выше

JNA

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

Можно придумать и другие отношения, например "меньше или рав­ны", но это то же самое, что и "не больше". Вот список альтернативных названий приведенных выше команд:

Название

Альтернативное название

Смысл альтернативного названия

JE

JZ

Перейти, если нуль

JNE

JNZ

Перейти, если не нуль

JL

JNGE

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

JNL

JGE

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

JG

JNLE

Перейти, если не меньше или равны

JNG

JLE

Перейти, если меньше или равны

JB

JNAE

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

JNB

JAE

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

JA

JNBE

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

JNA

JBE

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

Приведем также фактические состояния флажков для различных команд условных переходов.

Название команды

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

JE/JZ

ZF = 1

JNE/JNZ

ZF = 0

JL/JNGE

(SF  OF) = 1

JNL/JGE

(SF  OF) = 0

JG/JNLE

(SF  OF)  ZF = 0

JNG/JLE

(SF  OF)  ZF = 1

JB/JNAE

CF = 1

JNB/JAE

CF = 0

JA/JNBE

CF  ZF = 0

JNA/JBE

CF  ZF = 1

Имеются команды условных переходов, которые связаны не с отноше­ниями между числами, а с состоянием конкретного флажка. Команды JZ и JNZ, приведенные выше, фактически проверяют состояние флажка нуля, а команды JB и JNB - флажка переноса. Приведем и другие команды услов­ных переходов, которые проверяют состояние конкретного флажка:

Название

Смысл

Состояние флажка

JS

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

SF = 1

JNS

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

SF = 0

JO

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

OF = 1

JNO

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

OF = 0

JP

Перейти, если паритет

PF = 1

JNP

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

PF = 0

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

Название

Альтернативное название

Смысл альтернативного название

JP

JPE

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

JNP

JPO

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

Соседние файлы в папке Лекции препода