Assembler - язык неограниченных возможностей


Команды передачи управления - часть 3


/p>

Выполняет ближний переход на указанную метку, если регистр CX или ECX (для JCXZ и JECXZ соответственно) равен нулю. Так же как и команды из серии Jcc, JCXZ и JECXZ не могут выполнять дальних переходов. Проверка равенства СХ нулю, например, может потребоваться в начале цикла, организованного командой LOOPNE, — если в него войти с СХ = 0, то он будет выполнен 65 535 раз.

  • Команда:
  • LOOP метка
  • Назначение:
  • Цикл
  • Процессор:
  • 8086

    Уменьшает регистр ЕСХ на 1 и выполняет переход типа short на метку (которая не может быть дальше, чем на расстоянии от -128 до +127 байт от команды LOOP), если ЕСХ не равен нулю. Эта команда используется для организации циклов, в которых регистр ЕСХ (или СХ при 16-битной адресации) играет роль счетчика. Так, в следующем фрагменте команда ADD выполнится 10 раз:

    mov cx,0Ah loop_start: add ax,cx loop loop_start

    Команда LOOP полностью эквивалентна паре команд

    dec ecx jz метка

    Но LOOP короче этих двух команд на один байт и не изменяет значения флагов.

  • Команда:
  • LOOPE метка
  • Назначение:
  • Цикл, пока равно
  • Команда:
  • LOOPZ метка
  • Назначение:
  • Цикл, пока ноль
  • Команда:
  • LOOPNE метка
  • Назначение:
  • Цикл, пока не равно
  • Команда:
  • LOOPNZ метка
  • Назначение:
  • Цикл, пока не ноль
  • Процессор:
  • 8086

    Все эти команды уменьшают регистр ЕСХ на один, после чего выполняют переход типа short, если ЕСХ не равен нулю и если выполняется условие. Для команд LOOPE и LOOPZ условием является равенство единице флага ZF, для команд LOOPNE и LOOPNZ — равенство флага ZF нулю. Сами команды LOOPcc не изменяют значений флагов, так что ZF должен быть установлен (или сброшен) предшествующей командой. Например, следующий фрагмент копирует строку из DS:SI в строку в ES:DI (см. описание команд работы со строками), пока не кончится строка (СХ = 0) или пока не встретится символ с ASCII-кодом 13 (конец строки):

    mov cx,str_length move_loop: stosb lodsb cmp al,13 loopnz move_loop

  • Команда:
  • CALL операнд
  • Назначение:
  • Вызов процедуры
  • Процессор:
  • 8086
    <


    Начало  Назад  Вперед