Assembler для начинающих






    Может показаться удобным использовать команды 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 именно на примере команды пересылки, и в
    программе необходимо придерживаться рекомендаций, данных в этой
    главе, особенно, если поля источника и результата перекрываются.