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

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

    Перейдем к рассмотрению переходов для беззнаковыых данных.

  1. JA/JNBE - переход, если больше/переход, если не меньше и не равно. Команды осуществляют передачу управления при одновременном равенстве нулю флагов СF и ZF. В противном случае выполняется следующая команда.


        Пример. Пусть регистр AL содержит число 62H и выполняется следующая последовательность команд:
                  CMP AL, 60H
                  JA UPPER
                  RET
          UPPER:  MOV AL, 5EH                         .
    

        Первая команда в этой последовательности сбрасывает в нуль флаги CF и ZF. После выполнения команды JA UPPER управление передается команде, помеченной меткой UPPER. Это говорит о том, что содержимое регистра AL больше 60H.

  2. JAE/JNB - переход, если больше или равно/переход, если не меньше. При выполнении условия равенства нулю флага СF команда передает управление по адресу, указанному в операнде. В противном случае выполняется следующая команда.


        Пример. Пусть регистр ВХ содержит число D823H и выполняются следующие команды:
                  SUB BX, 100H
                  JAE ERROR
                  RET
         ERROR:   ADD DL,25H                         .
    

        Первая команда сбрасывает в нуль флаг СF. После выполнения второй команды управление передается команде с адресом ERROR. Это означает, что содержимое регистра BX больше числа 100H или равно ему.

  3. JB/JNAE - переход, если меньше/переход, если не больше и не равно. Команды передают управление при условии, что флаг переноса СF установлен в 1. В противном случае выполняется следующая команда.


        Пример. Пусть регистр AL содержит 00, однобайтовая ячейка памяти TEST_BIT содержит 1 и выполняется следующая последовательность команд:
                  CMP AL, TEST_BIT
                  JB  ABC
                  ADD DL,AL
                  RET
         ABC:     MOV CX,1                          .
    

        Команда CMP AL,TEST_BIT устанавливает флаг СF в 1. После выполнения второй команды управление передается по адресу ABC. Это означает, что содержание регистра AL меньше содержимого ячейки памяти TEST_BIT. Если бы регистр AL и ячейка TEST_BIT содержали одно и то же значение 00, то после выполнения первой команды флаг СF будет сброшен в 0 и выполнится команда ADD DL,AL.

  4. JBE/JNA - переход, если меньше или равно/переход, если не больше. Команды передают управление при условии, что флаг переноса СF или флаг нуля ZF установлены в 1. В противном случае выполняется следующая по порядку команда.


        Пример. Пусть однобайтовая ячейка памяти NEW_DATA содержит число 01H и выполняются команды:
                  CMP NEW_DATA,01H
                  JBE FOUND
                  ADD AX,BX
                  RET
          FOUND:  MOV AX,0               .
    

        Так как оба операнда первой команды равны друг другу, то после ее выполнения будет установлен в единицу флаг ZF. После выполнения второй команды управление будет передано на метку FOUND. Это означает, что содержимое ячейки памяти NEW_DATA меньше или равно значению второго операнда.

        Если в ячейке памяти NEW_DATA будет находиться, например, число 24H, то будет выполняться команда ADD AX,BX.

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




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