logo

Главная Система команд x86 Базовая система команд CPU Jcc

Система команд x86

Программирование - Архитектура и система команд микропроцессоров x86
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Jcc

Условный переход

Влияние команды на флаги и форматы команды:



O

D

I

T

S

Z

A

P

C

 

 

 

 

 

 

 

 

 

 

Код

Команда

Описание

Проц.

77 cb

JA rel8

Короткий переход, если выше (CF=0 и ZF=0)

8086

73 cb

JAE rel8

Короткий переход, если выше или равно (CF=0)

8086

72 cb

JB rel8

Короткий переход, если ниже (CF=1)

8086

76 cb

JBE rel8

Короткий переход, если ниже или равно (CF=1 или ZF=1)

8086

72 cb

JC rel8

Короткий переход, если перенос (CF=1)

8086

E3 cb

JCXZ rel8

Короткий переход, если CX=0

8086

E3 cb

JECXZ rel8

Короткий переход, если ECX=0

Intel386

74 cb

JE rel8

Короткий переход, если равно (ZF=1)

8086

74 cb

JZ rel8

Короткий переход, если нуль (ZF=1)

8086

7F cb

JG rel8

Короткий переход, если больше (ZF=0 и SF=OF)

8086

7D cb

JGE rel8

Короткий переход, если больше или равно (SF=OF)

8086

7C cb

JL rel8

Короткий переход, если меньше (SF<>OF)

8086

7E cb

JLE rel8

Короткий переход, если меньше или равно (ZF=1 или SF<>OF)

8086

76 cb

JNA rel8

Короткий переход, если не выше (CF=1 или ZF=1)

8086

72 cb

JNAE rel8

Короткий переход, если не выше или равно (CF=1)

8086

73 cb

JNB rel8

Короткий переход, если не ниже (CF=0)

8086

77 cb

JNBE rel8

Короткий переход, если не ниже или равно (CF=0 и ZF=0)

8086

73 cb

JNC rel8

Короткий переход, если не перенос (CF=0)

8086

75 cb

JNE rel8

Короткий переход, если не равно (ZF=0)

8086

7E cb

JNG rel8

Короткий переход, если не больше (ZF=1 или SF<>OF)

8086

7C cb

JNGE rel8

Короткий переход, если не больше или равно (SF<>OF)

8086

7D cb

JNL rel8

Короткий переход, если не меньше (SF=OF)

8086

7F cb

JNLE rel8

Короткий переход, если не меньше или равно (ZF=0 и SF=OF)

8086

71 cb

JNO rel8

Короткий переход, если не переполнение (OF=0)

8086

7B cb

JNP rel8

Короткий переход, если нечетно (PF=0)

8086

79 cb

JNS rel8

Короткий переход, если положительно (SF=0)

8086

75 cb

JNZ rel8

Короткий переход, если не нуль (ZF=0)

8086

70 cb

JO rel8

Короткий переход, если переполнение (OF=1)

8086

7A cb

JP rel8

Короткий переход, если паритет (PF=1)

8086

7A cb

JPE rel8

Короткий переход, если четно (PF=1)

8086

7B cb

JPO rel8

Короткий переход, если нечетно (PF=0)

8086

78 cb

JS rel8

Короткий переход, если отрицательно (SF=1)

8086

0F 87 cw/cd

JA rel16/32

Ближний переход, если выше (CF=0 и ZF=0)

Intel386

0F 83 cw/cd

JAE rel16/32

Ближний переход, если выше или равно (CF=0)

Intel386

0F 82 cw/cd

JB rel16/32

Ближний переход, если ниже (CF=1)

Intel386

0F 86 cw/cd

JBE rel16/32

Ближний переход, если ниже или равно (CF=1 или ZF=1)

Intel386

0F 82 cw/cd

JC rel16/32

Ближний переход, если перенос (CF=1)

Intel386

0F 84 cw/cd

JE rel16/32

Ближний переход, если равно (ZF=1)

Intel386

0F 84 cw/cd

JZ rel16/32

Ближний переход, если нуль (ZF=1)

Intel386

0F 8F cw/cd

JG rel16/32

Ближний переход, если больше (ZF=0 и SF=OF)

Intel386

0F 8D cw/cd

JGE rel16/32

Ближний переход, если больше или равно (SF=OF)

Intel386

0F 8C cw/cd

JL rel16/32

Ближний переход, если меньше (SF<>OF)

Intel386

0F 8E cw/cd

JLE rel16/32

Ближний переход, если меньше или равно (ZF=1 или SF<>OF)

Intel386

0F 86 cw/cd

JNA rel16/32

Ближний переход, если не выше (CF=1 или ZF=1)

Intel386

0F 82 cw/cd

JNAE rel16/32

Ближний переход, если не выше или равно (CF=1)

Intel386

0F 83 cw/cd

JNB rel16/32

Ближний переход, если не ниже (CF=0)

Intel386

0F 87 cw/cd

JNBE rel16/32

Ближний переход, если не ниже или равно (CF=0 и ZF=0)

Intel386

0F 83 cw/cd

JNC rel16/32

Ближний переход, если не перенос (CF=0)

Intel386

0F 85 cw/cd

JNE rel16/32

Ближний переход, если не равно (ZF=0)

Intel386

0F 8E cw/cd

JNG rel16/32

Ближний переход, если не больше (ZF=1 или SF<>OF)

Intel386

0F 8C cw/cd

JNGE rel16/32

Ближний переход, если не больше или равно (SF<>OF)

Intel386

0F 8D cw/cd

JNL rel16/32

Ближний переход, если не меньше (SF=OF)

Intel386

0F 8F cw/cd

JNLE rel16/32

Ближний переход, если не меньше или равно (ZF=0 и SF=OF)

Intel386

0F 81 cw/cd

JNO rel16/32

Ближний переход, если не переполнение (OF=0)

Intel386

0F 8B cw/cd

JNP rel16/32

Ближний переход, если нечетно (PF=0)

Intel386

0F 89 cw/cd

JNS rel16/32

Ближний переход, если положительно (SF=0)

Intel386

0F 85 cw/cd

JNZ rel16/32

Ближний переход, если не нуль (ZF=0)

Intel386

0F 80 cw/cd

JO rel16/32

Ближний переход, если переполнение (OF=1)

Intel386

0F 8A cw/cd

JP rel16/32

Ближний переход, если паритет (PF=1)

Intel386

0F 8A cw/cd

JPE rel16/32

Ближний переход, если четно (PF=1)

Intel386

0F 8B cw/cd

JPO rel16/32

Ближний переход, если нечетно (PF=0)

Intel386

0F 88 cw/cd

JS rel16/32

Ближний переход, если отрицательно (SF=1)

Intel386

Описание:

Команды условного перехода (исключая команду JCXZ) проверяют флаги, которые были установлены предыдущей командой. Условия для каждой мнемоники указаны выше. Термины "меньше" и "больше" используются для сравнения знаковых целых, "выше" и "ниже" используются для беззнаковых целых.

Если заданное условие исполняется, то происходит переход на местоположение, указанное операндом, если условие не исполняется то перехода не происходит и процессор продолжает работу со следующей команды.

Команды условного перехода используют непосредственные операнды rel8, rel16 или rel32, которые добавляются к текущему значению указателя команд (EIP) для определения точного адреса перехода. Наиболее эффективны команды с операндом rel8, цель которых может находиться в текущем кодовом сегменте в диапазоне от -128 до +127 байт относительно первого байта следующей команды. Относительный адрес также может задаваться операндом rel16 со значениями от -32768 до +32767 (при атрибуте размера адреса равном 16 бит) или rel32 — от -231 до +231 (при атрибуте размера адреса равном 32 бита).

Когда цель условного перехода находится в другом сегменте, прямое программирование условных дальних переходов не возможно — необходимо использовать противоположную форму команды перехода (например, вместо команды JE — команду JNE) и далее команду безусловного дальнего перехода в другой сегмент. Например, если нельзя запрограммировать:

        JZ FARLABEL

 

то вместо этого программируется:

        JNZ BEYOND

        JMP FARLABEL

        BEYOND:

 

Исходя из того, что может быть несколько путей интерпретации состояния флагов, большинство ассемблеров обеспечивает более чем одну мнемонику для большинства кодов операций условных переходов. Например, при сравнении двух символов в EAX с последующим условным переходом по их равенству, используется команда JE, а при побитном логическом умножении AX и маски битового поля с переходом только если результат равен нулю, используется команда JZ — синоним команды JE.

Команда JCXZ отличается от других команд условного перехода тем, что она проверяет содержимое регистра CX или ECX на нуль, а не состояние флагов. Команда JCXZ полезна вначале условного цикла, который завершается командой условного цикла (например, такой как LOOPNE). Команда JCXZ предотвращает вхождение в цикл с регистром CX или ECX равным нулю.

Операция:

IF condition

   THEN

      tempEIP = EIP + SignExtend(DEST);

      IF OperandSize = 16

         THEN tempEIP = tempEIP AND 0x0000FFFFh;

      FI;

      IF (tempEIP выходит за пределы кодового сегмента)

         THEN #GP(0);

         ELSE EIP = tempEIP;

      FI;

FI;

Особые ситуации защищенного режима:

#GP(0), если при переходе смещение выходит за пределы кодового сегмента.

Intel386 … :
#UD при использовании префикса LOCK.

Особые ситуации режима реальной адресации:

#GP, если при переходе смещение выходит за пределы кодового сегмента, что возможно только при применении префикса 32-битного адреса.

Intel386 … :
#UD при использовании префикса LOCK.

Особые ситуации режима V86:

#GP, если при переходе смещение выходит за пределы кодового сегмента, что возможно только при применении префикса 32-битного адреса.

#UD при использовании префикса LOCK.


Входит в группу команд: Базовая система команд CPU




Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru

Top.Mail.Ru       Сервер радиолюбителей России - схемы, документация,

 соревнования, дипломы, программы, форумы и многое другое!   схемы новости электроники