Несмотря на то, что цепочечные команды имеют отношение к одному байту или одному слову, префикс REP обеспечивает повторение команды несколько раз. Префикс кодируется непосредственно перед цепочечной командой, например, REP MOVSB. Для использования префикса REP необходимо установить начальное значение в регистре CX. При выполнении цепочечной команды с префиксом REP происходит уменьшение на 1 значения в регистре CX до нуля.
Таким образом, можно обрабатывать строки любой длины.
Флаг направления определяет направление повторяющейся операции:
uдля направления слева направо необходимо с помощью команды CLD установить флаг DF в 0;
uдля направления справа налево необходимо с помощью команды STD установить флаг DF в 1.
В следующем примере выполняется пересылка 20 байт из STRING1 в STRING2. Предположим, что оба регистра DS и ES инициализированы адресом сегмента данных:
STRING1 DB 20 DUP('*')
STRING2 DB 20 DUP(' ') ...
CLD ;Сброс флага DF
MOV CX,20 ;Счетчик на 20 байт
LEA DI,STRING2 ;Адрес области "куда"
LEA SI,STRING1 ;Адрес области "откуда"
REP MOVSB ;Переслать данные
При выполнении команд CMPS и SCAS возможна установка флагов состояния, так чтобы операция могла прекратиться сразу после обнаружения необходимого условия. Ниже приведены модификации префикса REP для этих целей:
uREP — повторять операцию, пока CX не равно 0;
uREPZ или REPE — повторять операцию, пока флаг ZF показывает «равно или ноль».
uПрекратить операцию при флаге ZF, указывающему на не равно или не ноль или при CX равном 0;
uREPNE или REPNZ — повторять операцию, пока флаг ZF показывает «не равно или не ноль».
uПрекратить операцию при флаге ZF, указывающему на «равно или нуль» или при CX равным 0.