Команды LOOP, LOOPD, LOOPE, LOOPNE, LOOPNZ, LOOPZ используются для организации циклов. Счетчиком цикла служит регистр CX или ECX (в зависимости от разрядности). В командах циклов с условием (Z, NZ, E, NE) цикл выполняется пока заданное условие истинно.

 

Команды LOOP, LOOPD
Синтаксис: LOOP op1
LOOPD op1
Операнды: op1 - i8
Назначение: Цикл
Процессор: 8086+
80386+
Флаги: Не изменяются
Комментарий: Команда LOOP уменьшает значение регистра CX на 1 и, если регистр не равен 0, передает управление по смещению, заданному в операнде. В противном случае (регистр CX обнулился) выполняется следующая команда.
Если команда используется в 32-разрядном режиме адресации или указана команда LOOPD, то для цикла будет использован регистр ECX.
Ограничения: Нет
Примеры:
	mov	cx,100
l1:	add	ax,[bx]
	inc	bx
	loop	l1
Команды LOOPE и LOOPZ
Синтаксис: LOOPE op1
LOOPZ op1
Операнды: op1 - i8
Назначение: Цикл, пока равно (пока ноль)
Процессор: 8086+
Флаги: Не изменяются
Комментарий: Команды LOOPE и LOOPZ уменьшают значение регистра CX на 1 и, если регистр не равен 0 и флаг ZF = 1, передают управление по смещению, заданному в операнде.
Если команда используется в 32-разрядном режиме адресации или используются 32-битные модификации этих команд (LOOPDE, LOOPDZ), то для цикла будет использован регистр ECX.
Ограничения: Поскольку все модификации команды LOOP не изменяют регистр флагов, то флаг ZF должен изменяться внутри тела цикла.
Примеры:
	mov	cx,100
l1:	add	ax,[bx]
	dec	bx
	loope	l1
Команды LOOPNE и LOOPNZ
Синтаксис: LOOPNE op1
LOOPNZ op1
Операнды: op1 - i8
Назначение: Цикл, пока не равно (пока не ноль)
Процессор: 8086+
Флаги: Не изменяются
Комментарий: Команды LOOPNE и LOOPNZ уменьшают значение регистра CX на 1 и, если регистр не равен 0 и флаг ZF = 0, передают управление по смещению, заданному в операнде.
Если команда используется в 32-разрядном режиме адресации или используются 32-битные модификации этих команд (LOOPDNE, LOOPDNZ), то для цикла будет использован регистр ECX.
Ограничения: Поскольку все модификации команды LOOP не изменяют регистр флагов, то флаг ZF должен изменяться внутри тела цикла.
Примеры:
	mov	cx,100
l1:	add	ax,[bx]
	dec	bx
	loopne	l1