|
|||
REP: Префикс повторения цепочечной командыREP: Префикс повторения цепочечной команды Несмотря на то, что цепочечные команды имеют отношение к одному байту или одному слову, префикс REP обеспечивает повторение команды несколько раз. Префикс кодируется непосредственно перед цепочечной командой, например, REP MOVSB. Для использования префикса REP необходимо установить начальное значение в регистре CX. При выполнении цепочечной команды с префиксом REP происходит уменьшение на 1 значения в регистре CX до нуля. Таким образом, можно обрабатывать строки любой длины. Флаг направления определяет направление повторяющейся операции: · для направления слева направо необходимо с помощью команды CLD установить флаг DF в 0; · для направления справа налево необходимо с помощью команды 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 для этих целей: · REP — повторять операцию, пока CX не равно 0; · REPZ или REPE — повторять операцию, пока флаг ZF показывает «равно или ноль». · Прекратить операцию при флаге ZF, указывающему на не равно или не ноль или при CX равном 0; · REPNE или REPNZ — повторять операцию, пока флаг ZF показывает «не равно или не ноль». · Прекратить операцию при флаге ZF, указывающему на «равно или нуль» или при CX равным 0.
|
|||
|