Назначение: указание условного и безусловного повторения следующей за данной командой цепочечной операции.
Синтаксис
Алгоритм работы:
Алгоритм работы зависит от конкретного префикса. Префиксы rep, repe и repz на самом деле имеют одинаковый код операции, их действия зависят от той цепочечной команды, которую они предваряют:
rep используется перед следующими цепочечными командами и их краткими эквивалентами: movs, stos, ins, outs. Действия rep:
анализ содержимого cx:
если cx<>0, то выполнить цепочечную команду, следующую за данным префиксом и перейти к шагу 2;
если cx=0, то передать управление команде, следующей за данной цепочечной командой (выйти из цикла по rep);
уменьшить значение cx=cx–1 и вернуться к шагу 1;
repe и repz используются перед следующими цепочечными командами и их краткими эквивалентами: cmps, scas. Действия repe и repz:
анализ содержимого cx и флага zf:
если cx<>0 или zf<>0, то выполнить цепочечную команду, следующую за данным префиксом, и перейти к шагу 2;
если cx=0 или zf=0, то передать управление команде, следующей за данной цепочечной командой (выйти из цикла по rep);
уменьшить значение cx=cx-1 и вернуться к шагу 1;
repne и repnz также имеют один код операции и имеют смысл при использовании перед следующими цепочечными командами и их краткими эквивалентами: cmps, scas. Действия repne и repnz:
анализ содержимого cx и флага zf:
если cx<>0 или zf=0, то выполнить цепочечную команду, следующую за данным префиксом и перейти к шагу 2;
если cx=0 или zf<>0, то передать управление команде, следующей за данной цепочечной командой (выйти из цикла по rep);
уменьшить значение cx=cx–1 и вернуться к шагу 1.
Состояние флагов после выполнения команды:
ZF
r
Применение:
Команды rep, repe, repz, repne и repnz в силу специфики своей работы называются префиксами. Они имеют смысл только при использовании цепочечных операций, заставляя их циклически выполняться и тем самым без организации внешнего цикла обрабатывать последовательности элементов фиксированной длины. Большинство применяемых префиксов являются условными, то есть они прекращают работу цепочечной команды при выполнении определенных условий.
См. также: урок 11 и команды cmps/cmpsb/cmpsw/cmpsd, ins/insb/insw/insd, outs, movs/movsb/movsw/movsd, scas/scasb/scasw/scasd, stos/stosb