J
Jcc Команды условных переходов
Команды, обозначаемые (в книгах, не в программах!) Jcc, осуществляют переход по указанному адресу при выполнении условия, заданного мнемоникой команды. Если заданное условие не выполняется, переход не осуществляется, а выполняется команда, следующая за командой Jcc. Переход может осуществляться как вперед, так и назад в диапазоне + 127…-128 байтов.
В составе команд процессора предусмотрены следующие команды условных переходов:
Команда Перейти, если Условие перехода ja выше CF=0 и ZF=0 jae выше или равно CF=0 jb ниже CF=1 jbe ниже или равно CF=1 или ZF=1 jc перенос CF=1 jcxz CX=0 CX=0 je равно ZF=1 jg больше ZF=0 или SF=OF jge больше или равно SF=OF jl меньше SF не равно OF jle меньше или равно ZF=1 или SF не равно OF jna не выше CF=1 или ZF=1 jnae не выше и не равно CF=1 jnb не ниже CF=0 jnbe не ниже и не равно CF=0 и ZF=0 jnc нет переноса CF=0 jne не равно ZF=0 jng не больше ZF=1 или SF не равно OF jnge не больше и не равно SF не равно OF jnl не меньше SF=OF jnle не меньше и не равно ZF=0 и SF=OF jno нет переполнения OF=0 jnp нет четности PF=0 jns знаковый бит равен О SF=0 jnz не нуль ZF=0 jo переполнение OF=1 jp есть четность PF=1 jpe сумма битов четная PF=1 jpo сумма битов нечетная PF=0 js знаковый бит равен SF=1 jz нуль ZF= I
Команды условных переходов, осуществляющие переход по условию "выше – ниже", предназначены для анализа чисел без знака; команды, осуществляющие переход по условию "больше – меньше", предназначены для анализа чисел со знаком.
Пример 1:
cmp СХ,0; CX=0? je equal; Если да, перейти па метку equal
Пример 2:
cmp AX,1000; Пусть AX=8000h=32768 ;(=-32768) ja above; 32768 > 1000. Переход будет
Пример 3:
cmp AX,1000h; Пусть AX=8000h=-32768 ; (=32768) jg greater; -32768 < 1000h. Перехода не будет
Пример 4:
int 21h; Вызов системной функции jc error; Если CF=1 (ошибка), перейти ; на метку error
Команды условных переходов имеют варианты 16- и 32-разрядной адресации (при тех же мнемонических обозначениях) и могут передавать управление в диапазоне -32768…+32767 байт для сегментов с атрибутом размера 16 и в диапазоне -231…+231-1 байт для сегментов с атрибутом размера 32.