19. Команды организации циклического выполнения программ.

Команда LOOP позволяет организовать циклы (loops), подобные циклам for в языках высокого уровня с автоматическим уменьшением счетчика цикла.
Синтаксис команды:

loop <метка перехода>

Команда реализует описанные далее действия.

  • Декремент регистра ЕСХ/СХ.
  • Сравнение регистра ЕСХ/СХ с нулем:
    • если (ЕСХ/СХ) > 0, то управление передается на метку перехода;
    • если (ЕСХ/СХ) = 0, то управление передается на следующую после LOOP команду.


Команды LOOPE и LOOPZ (Loop still сх <> 0 or Zero flag = 0 — повторить цикл пока СХ <> 0 и ZF = 0) — абсолютные синонимы, поэтому используйте ту команду, которая вам больше нравится.
Синтаксис команд:

loope/loopz <метка перехода>

Команды реализуют описанные далее действия.

  • Декремент регистра ЕСХ/СХ.
  • Сравнение регистра ЕСХ/СХ с нулем и анализ состояния флага нуля ZF:
    • если (ЕСХ/СХ) > 0 и ZF = 1, управление передается на метку перехода;
    • если (ЕСХ/СХ) = 0 или ZF = 0, управление передается на следующую после LOOP команду.


Команды LOOPNE и LOOPNZ(Loop still сх <> 0 and NonZero flag = 0 — повторить цикл, пока СХ <> 0 и ZF = 1) также абсолютные синонимы.
Синтаксис команд:

loopne/loopnz <метка_перехода>

Команды реализуют описанные далее действия.

  • Декремент регистра ЕСХ/СХ.
  • Сравнение регистра ЕСХ/СХ с нулем и анализ состояния флага нуля ZF:
    • если (ЕСХ/СХ) = 0 и ZF = 0, управление передается на метку перехода;
    • если (ЕСХ/СХ) = 0 или ZF= 1, управление передается на следующую после LOOP команду.


Команды LOOPE/LOOPZ и LOOPNE/LOOPNZ по принципу своей работы являются взаимнообратными. Они расширяют действие команды LOOP тем, что дополнительно анализируют флаг ZF. Это дает возможность организовать досрочный выход из цикла, используя этот флаг в качестве индикатора. Недостаток команд организации цикла LOOP, LOOPE/LOOPZ и LOOPNE/LOOPNZ заключается в том, что они реализуют только короткие переходы (от -128 до + 127 байт).

17.07.2015