Хелпикс

Главная

Контакты

Случайная статья





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.

 



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.