13. Команды работы со строками. - mRrvz/bmstu-asm GitHub Wiki
Строка-источник - DS:SI
, строка-приёмник - ES:DI
.
За один раз обрабатывается один байт (слово).
-
MOVS
/MOVSB
/MOVSW
<приёмник>, <источник>
- копирование -
CMPS
/CMPSB
/CMPSW
<приёмник>, <источник>
- сравнение -
SCAS
/SCASB
/SCASW
<приёмник>
- сканирование (сравнение сAL/AX
(в зависимости от размеров приемника) -
LODS
/LODSB
/LODSW
<источник>
- чтение (вAL/AX
) -
STOS
/STOSB
/STOSW
<приёмник>
- запись (изAL/AX
) -
Префиксы:
REP
/REPE
/REPZ
/REPNE
/REPNZ
-
REP
- повторить следующую строковую операцию -
REPE
- повторить следующую строковую операцию, если равно -
REPZ
- Повторить следующую строковую операцию, если нуль -
REPNE
- повторить следующую строковую операцию, если не равно -
REPNZ
- повторить следующую строковую операцию, если не нуль
Префиксы REP
(F3h
), REPE
(F3h
) и REPNE
(F2h
) применяются со строковыми операциями. Каждый префикс заставляет строковую команду, которая следует за ним, повторяться указанное в регистре счетчике (E)CX
(в случае нашей модели процессора 8086
- CX
) количество раз или, кроме этого, (для префиксов REPE
и REPNE
) пока не встретится указанное условие во флаге ZF
.
Пример использования: REP LODS AX
Мнемоники REPZ
и REPNZ
являются синонимами префиксов REPE
и REPNE
соответственно и имеют одинаковые с ними коды. Префиксы REP
и REPE
/ REPZ
также имеют одинаковый код F3h
, конкретный тип префикса задается неявно той командой, перед которой он применен.
Все описываемые префиксы могут применяются только к одной строковой команде за один раз. Чтобы повторить блок команд, используется команда LOOP
или другие циклические конструкции.
Затрагиваемые флаги: OF
, DF
, IF
, TF
, SF
, ZF
, AF
, PF
, CF