|
Может показаться удобным использовать
команды LODS и STOS для
пересылки данных из одного места в другое,
но для этой цели
существует другая команда, пересылка
строки MOVS.Эта команда
подобна комбинации команд LODS и
STOS.Она берет данные из пары
регистров [DS:SI], помещает их в пару
регистров [ES:DI], и изменяет
как регистр SI, так и регистр DI, чтобы
они указывали на следующую
ячейку в каждой строке.Команда MOVS делает это одна, и не
загружает аккумулятор во время
пересылки.Команда MOVS делает
сочетание LODS и STOS более быстрым и
дающим меньше побочных
эффектов.
Команда MOVS указывает два операнда
памяти. Только MOVS и еще
одна строковая команда CMPS работают с
двумя операндами памяти. Все
остальные команды требуют, чтобы один или
оба операнда находились в
регистре микропроцессора. Как и команды
LODS и STOS, команда MOVS
работает как с байтами, так и со словами.
Поскольку строковые
команды имеют дело с жестко заданными
адресами, для определения
типов служат только операнды, написанные
программистом. Команда
должна иметь оба операнда, и оба они
должны быть одинаковых типов,
иначе программист может указать тип
пересылки частью кода операции,
т.е. команда MOVSB и случае байтовых строк
или команда MOVSW для
строк, состоящих из слов. Если в программе
используется основная
форма, команда MOVS, ассемблер проверяет
переменные на правильность
сегментной адресации, а также проверяет их
типы.
Комбинация команды MOVS с префиксом REP
дает эффективную
команду пересылки блока. Имея счетчик в
регистре CX и показывающий
направление пересылки флаг направления,
команда REP MOVS пересылает
данные из одного места памяти в другое
очень быстро.
Микропроцессор, выполняющий команду REP
MOVS, пересылает данные с
максимально возможной скоростью. Он больше
не выбирает никакие
команды, поскольку единственное, что
делается во время такой
пересылки - это пересылка.
Установка флага направления критична для
правильной работы
команды REP MOVS. Различные виды установки
флага направления
обсуждались в гл.3 именно на примере
команды пересылки, и в
программе необходимо придерживаться
рекомендаций, данных в этой
главе, особенно, если поля источника и
результата перекрываются.
|