Справочник по языку Ассемблера IBM PC

       

LOOPE/LOOPZ LOOPNE/LOOPNZ


(LOOP control by register cx not equal 0 and ZF=1)

(LOOP control by register cx not equal 0 and ZF=0)

Управление циклом по cx c учетом значения флага ZF

 

Схема команды:  loope/loopz метка 
loopne/loopnz метка 

Назначение: организация цикла со счетчиком в регистре cx с учетом флага zf.


Алгоритм работы:

выполнить декремент содержимого регистра ecx/cx;

проанализировать регистр ecx/cx:



если ecx/cx=0, передать управление следующей за loopxx команде;

если ecx/cx=1, передать управление команде, метка которой указана в качестве операнда loopxx;

анализ флага zf:

если zf=0, для команд loope/loopz это означает выход из цикла, для команд loopne/loopnz — переход к началу цикла;

если zf=1, для команд loope/loopz это означает переход к началу цикла, для команд loopne/loopnz — выход из цикла.

Состояние флагов после выполнения команды:

выполнение команды не влияет на флаги

Применение:


Команды loopxx удобно использовать вместе с командами, которыe в результате своей работы меняют значение флага zf. Типичный пример — команда сравнения cmp.

;найти первый пробел в строке символов str     db      'Найти первый пробел' str_size=$-str ...         cld         mov     cx,str_size         lea     si,str cycl:         lodsb         cmp     al,' '         loopne  cycl         jcxz    m1      ;переход, если пробелов нет         dec     si      ;в si — адрес пробела в строке str ... m1         

См. также: уроки 8, 10, 11 и команду



Содержание раздела