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

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

    Команду LOOP в примере из 25 шага можно заменить на 2 команды: одна уменьшает содержимое СХ, а другая выполняет условный переход:

      DEC CX
      JNZ A20            .
Команда DEC устанавливает флаг нуля во флаговом регистре в 0 или 1. Команда JNZ проверяет эту установку. До тех пор, пока содержимое регистра СХ будет отлично от нуля, управление будет передаваться на метку А20.

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

   

Знаковые и беззнаковые данные

    Существуют два типа данных, над которыми выполняются арифметические операции и операции сравнения. Это беззнаковые и знаковые данные. Тип данных определяется используемыми командами. Таким образом, используемая команда сообщает Ассемблеру, рассматривать ли операнды как знаковые или беззнаковые.

    Беззнаковые данные используют все биты как биты данных. В знаковых данных самый левый бит представляет собой знак. Если его значение равно нулю, то число положительное, если единице - то отрицательное. Например, пусть в регистре АХ содержится число 1100011000110011, а в ВХ - 0001011001101101. Если рассматривать эти значения как беззнаковые, то число в регистре АХ больше числа из регистра ВХ. Если же считать значение левого бита знаком числа, то содержимое регистра АХ меньше числа из регистра ВХ.

    Таким образом, используемая команда играет определяющую роль в определении того, имеют или нет операнды знак.

   

Сравнение операндов

    Очень часто при создании программ приходится осуществлять сравнение некоторых значений. Для этой цели можно использовать команду СМР. Ее общий вид:

          CMP <1-й операнд>, <2-й операнд>     .

    Она производит сравнение операндов. Например, по команде СМР АХ, ВХ из содержимого регистра АХ вычитается содержимое регистра ВХ. Результат операции изменяет флаги АF, СF, ОF, РF, SF, ZF, однако сами операнды не изменяются. Первый операнд может быть записан в регистре, либо в ячейке памяти. Второй операнд может быть задан в регистре, ячейке памяти либо константой. Не допускается использовать для записи операндов сегментный регистр или записывать оба операнда одновременно в ячейки оперативной памяти.

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




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