Шаг 30.
Переходы для знаковых данных

    На этом шаге мы рассмотрим переходы для знаковых данных.

    В Ассемблере существуют следующие переходы для знаковых данных.

  1. JG/JNLE - переход, если больше/переход, если не меньше и не равно. Команды передают управление по адресу, при условии одновременного равенства значений флагов SF и OF и равенства нулю флага ZF. В противном случае выполняется следующая по очереди команда.


        Пример. Пусть регистр SI содержит число 0020H, регистр DX - число FF23H и выполняется следующая последовательность команд:
                 CMP  SI,DX
                 JG   SAME
                 ADD  AX,1
                 RET
      SAME:      MOV  BX,0                               .
    

        После выполнения первой команды все три флага SF, OF и ZF сбрасываются в нуль. После выполнения команды JG SAME выполняется команда MOV BX, 0. Это означает, что содержимое регистра SI (положительное шестнадцатеричное число 20H) больше, чем содержимое регистра DX (отрицательное шестнадцатеричное число FF23H).

  2. JGE/JNL - переход, если больше или равно/переход, если не меньше. Команды передают управление по адресу, при условии, что значения флагов SF и OF равны. В противном случае выполняется следующая по порядку команда.


        Пример. Пусть регистр AX содержит число 0020H и выполняется следующая последовательность команд:
                   DEC AX	
                   JGE UNSIGN
                   ADD BX,1
                   RET
         UNSIGN:   INC  BX                             .
    

        После выполнения первой команды в регистре AX будет находиться положительное, отличное от нуля число. Следовательно, флаги SF и OF будут сброшены в 0. После выполнения команды JGE UNSIGN управление будет передано по адресу UNSIGN. Это означает, что содержимое регистра AX не меньше нуля.

        Пусть регистр AX содержит число FF00H. Тогда в приведенном примере после выполнения первой команды будет установлен в 1 флаг SF и будет выполнена команда ADD BX,1.

  3. JL/JNGE - переход, если меньше/переход, если не больше и не равно. Команды передают управление по адресу, при условии, что значения флагов SF и OF не равны. В противном случае выполняется следующая по порядку команда.


        Пример. Пусть регистр AX содержит число FFFFH, регистр DX - число 0002H и выполняется следующая последовательность команд:
                 CMP AX,DX
                 JL CHECK
                 ADD BX,1
                 RET
        CHECK:   MOV AX,0                       .
    

        Первая команда устанавливает флаг SF в 1, а флаг OF в 0. После выполнения команды JL CHECK управление будет передано на метку CHECK. Это означает, что содержимое регистра AX меньше содержимого регистра DX.

        Пусть регистр AX содержит число FF00H. Тогда в приведенном примере после выполнения первой команды будет установлен в 1 флаг SF и будет выполнена команда ADD BX,1.

  4. JLE/JNG - переход, если меньше или равно/переход, если не больше. Команды передают управление по адресу, при условии, что значения флагов SF и OF не равны или если флаг ZF установлен в 1. В противном случае выполняется следующая по порядку команда.


        Пример. Пусть регистр CX содержит число D700H, а регистр AX - число 0124H и выполняется следующая последовательность команд:
                CMP CX,AX
                JLE NEXT
                ADD BX,1
                RET
        NEXT:   INC  BX                          .
    

        После выполнения первой команды флаг SF будет установлен в 1, а OF - в 0. После выполнения команды JLE NEXT управление будет передано по адресу NEXT. Это означает, что содержимое регистра CX меньше AX.

        Пусть регистр CX содержит число 0125H. Тогда в приведенном примере после выполнения первой команды будут установлены в 0 флаги SF и OF, следовательно, будет выполнена команда ADD BX,1.

    На следующем шаге мы рассмотрим специальные переходы.




Предыдущий шаг Содержание Следующий шаг