L
LOOP Циклическое выполнение, пока содержимое СХ не равно нулю
Команда loop выполняет декремент содержимого регистра СХ, и если оно не равно 0, осуществляет переход на указанную метку вперед или назад в том же программном сегменте в диапазоне -128… + 127 байт. Обычно метка помещается перед первым предложением тела цикла, а команда loop является последней командой цикла. Содержимое регистра СХ рассматривается как целое число без знака, поэтому максимальное число повторений группы включенных в цикл команд составляет 65536 (если перед входом в цикл СХ=0). Команда не воздействует на флаги процессора.
Пример 1:
;В полях данных: array dw 4096 dup (?); Массив из 4096 слов ;В программном сегменте: lea BX,array; ВХ › array xor SI,SI;SI=0 mov CX,4096; Счетчик повторений mov AX,1; Число-заполнитель array: mov [BX] [SI],AX; Очистка элемента массива inc SI; Сдвиг к следующему inc SI; слову массива loop array; Повторить СХ раз
Пример 2:
mov CX,20 delay:loop delay; Небольшая задержка
При использовании в качестве счетчика расширенного регистра ЕСХ максимальное число шагов в цикле увеличивается до 232. Для того чтобы в 16-разрядном приложении процессор при выполнении команды loop использовал не 16-разрядный регистр СХ, а 32-разрядный регистр ЕСХ, перед командой loop необходимо указать префикс замены размера адреса 67h.
Пример:
mov ЕСХ,О zzzz: db 67h; Префикс замены размера адреса loop zzzz; Цикл из 232: шагов, реализующий ;программную задержку порядка минут
LOOPE/LOOPZ Циклическое выполнение, пока равно/циклическое выполнение, пока нуль
Оба обозначения представляют собой синонимы и относятся к одной команде. Команда выполняет декремент содержимого регистра СХ, и если оно не равно 0, и флаг ZF установлен, осуществляет переход на указанную метку вперед или назад в том же программном сегменте в диапазоне -128…+127 байтов. Содержимое регистра СХ рассматривается как целое число без знака, поэтому максимальное число повторений группы включенных в цикл команд составляет 65536. Команда не воздействует на флаги процессора.
Пример:
;В полях данных, адресуемых через DS: command db 80 dup (' ') ;В программном сегменте: …; Копирование в поле command строки, ;содержимое которой следует анализировать lea SI, command; Настроим DS:SI сld; Обработка вперед mov CX,80; Обрабатывать не более 80 байтов pass: lodsb; Загрузим в AL очередной символ сmр АL, ' '; Пропустим все пробелы в loopepass; начале строки dec SI; Сдвиг на 1 символ назад ;DS:SI › первый символ, отличный от пробела
При использовании в качестве счетчика расширенного регистра ЕСХ максимальное число шагов в цикле увеличивается до 232. Для того, чтобы в 16-разрядном приложении процессор при выполнении команд loope/loopz использовал не 16-разрядный регистр СХ, а 32-разрядный регистр ЕСХ, перед командами loope/loopz необходимо указать префикс замены размера адреса 67h.
Пример:
mov ЕСХ, 1000000; Предельное число шагов хххх:…; Тело цикла db 67h loopexxxx