Пересылка строки

    Может показаться удобным использовать команды 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 именно на примере команды пересылки, и в

    программе необходимо придерживаться рекомендаций, данных в этой

    главе, особенно, если поля источника и результата перекрываются.