Иллюстрированный самоучитель по Assembler

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; Небольшая задержка

Иллюстрированный самоучитель по Assembler › Приложение. Система команд процессоров Intel. › L При использовании в качестве счетчика расширенного регистра ЕСХ максимальное число шагов в цикле увеличивается до 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 › первый символ, отличный от пробела

Иллюстрированный самоучитель по Assembler › Приложение. Система команд процессоров Intel. › L При использовании в качестве счетчика расширенного регистра ЕСХ максимальное число шагов в цикле увеличивается до 232. Для того, чтобы в 16-разрядном приложении процессор при выполнении команд loope/loopz использовал не 16-разрядный регистр СХ, а 32-разрядный регистр ЕСХ, перед командами loope/loopz необходимо указать префикс замены размера адреса 67h.

Пример:

mov ЕСХ, 1000000; Предельное число шагов
хххх:…; Тело цикла
db 67h
loopexxxx
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.