Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка Программир на ассемблере.doc
Скачиваний:
8
Добавлен:
17.09.2019
Размер:
605.7 Кб
Скачать

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

При выполнении команд безусловных переходов происходит модификация IP или IP и CS, а их прежнее содержимое теряется.

Команда JMP - безусловный переход имеет следующие форматы:

внутрисегментные переходы

JMP disp8

JMP disp16

JMP mem/ reg

межсегментные переходы

JMP addr

JMP mem

Двухбайтовая команда:

JMP disp8 - содержит во втором байте смещение, которое интерпретируется как знаковое целое.

При выполнении команды значение смещения прибавляется (с расширением знака до 16 бит) к содержимому IP, которое соответствует адресу команды, находящейся после команды JMP. Диапазон значений байта смещения составляет -128 ... +128. Если смещение положительное, осуществляется переход вперед, а если отрицательное - переход назад.

Трехбайтовая команда:

JMP disp16 - производит такое же действие, как предыдущая команда, но содержит 16-ти битное смещение. Смещение также интерпретируется как знаковое целое, диапазон -32768...+32767.

Команда JMP mem/reg реализует косвенный безусловный переход в программе. Здесь адресом перехода служит содержимое 16-ти битного регистра или слова памяти, определяемых байтом способа адресации.

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

Команда JMP addr содержит 4 байта прямого адреса перехода, которые определяют новое содержимое регистров IP и CS.

В команде косвенного межсегментного перехода JMP mem допускается адресация только памяти. Слово из адресуемой ячейки памяти загружается в IP, а следующее слово - в регистр CS.

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

В системе команд МП 8086 имеется 19 двухбайтовых команд условных переходов. Все они имеют единый формат:

КОП disp8

При выполнении этих команд анализируется некоторые условия, закодированные текущими состояниями флагов, и в зависимости от удовлетворения условия переход осуществляется или нет. Если условие истинно, управление передается по адресу перехода путем прибавления к содержимому IP однобайтного знакового смещения (с расширением до 16 бит). А если условие ложно, выполняется следующая по порядку команда. Таким образом, все условные переходы в МП i8086 являются короткими.

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

Команды позволяют проверить все отношения между знаковыми и беззнаковыми числами. Фигурирующие в определении команд термины “больше” и “меньше” относятся к знаковым числам, представленным в дополнительном коде, а “выше” и “ниже” - к беззнаковым. Например, число BE “меньше” и “выше” числа 37.

Команду JCXZ удобно помещать в начале цикла, особенно в том случае, если возможна ситуация при которой цикл (со счетчиком СХ) не выполнится ни разу.

Мнемоника

Условие

Отношение

Функция перейти, если

JA/JNBE

CFZF=0

>

выше/не ниже или равно

JAE/JNB

CF=0

выше или равно/не ниже

JB/JNAE

CF=1

<

ниже/не выше или равно

JBE/JNA

CFZF=1

ниже или равно/не выше

JC

CF=1

есть перенос

JE/JZ

ZF=1

=

равно/нуль

JG/JNLE

(SFOF)ZF=0

>

больше/не меньше или равно

JGE/JNL

SFOF=0

больше или равно/не меньше

JL/JNGE

SFOF=1

<

меньше/не больше или равно

JLE/JNG

(SFOF)ZF=1

меньше или равно/не больше

JNC

CF=0

нет переноса

JNE/JNZ

ZF=0

не равно/не нуль

JNO

OF=0

нет переполнения

JNP/JPO

PF=0

нет паритета/паритет не четный

JNS

SF=0

нет знака -

JO

OF=1

есть переполнение

JP/JPE

PF=1

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

JS

SF=1

есть знак -

JCXZ

(CX)=0

содержимое регистра СХ=0