M
MOVS Пересылка данных из строки в строку. MOVSB Пересылка байта данных из строки в строку. MOVSW Пересылка слова данных из строки в строку.
Команды предназначены для операций над строками (строкой называется последовательность байтов или слов памяти с любым содержимым). Они пересылают по одному элементу строки, который может быть байтом или словом. Первый операнд (приемник) адресуется через ES:DI, второй (источник) – через DS:SI. Операцию пересылки можно условно изобразить следующим образом:
(DS:SI) › (ES:DI)
После каждой операции пересылки регистры SI и DI получают положительное (если флаг DF=0) или отрицательное (если флаг DF=1) приращение. Величина приращения составляет 1 или 2 в зависимости от размера пересылаемых элементов. Вариант команды movs имеет формат:
movs строка_1, строка_2
В этом случае байты или слова из строки строка_2 пересылаются на место строки строка_1. Размер пересылаемых элементов определяется описанием строк (с помощью директив db или dw). Это не избавляет от необходимости инициализировать регистры ES:DI и DS:SI адресами строк строка _1 и строка_2. В этом формате возможна замена сегмента второй строки (источника):
movs строка_1, ES:строка_2
Рассматриваемые команды могут предваряться префиксом повторения rep (повторять СХ раз). После выполнения рассматриваемых команд регистры SI и DI указывают на ячейки памяти, находящиеся за теми (если DF=0) или перед теми (если DF=1) элементами строк, на которых закончились операции пересылки. Если флаг DF сброшен, то пары регистров DS:SI и ES:DI следует инициализировать начальными адресами строк-операндов; строка-источник будет пересылаться от се начала, в порядке возрастания номеров ее байтов. Если флаг DF установлен, то пары регистров DS:SI и ES:DI следует инициализировать конечными адресами строк-операндов; строка-источник будет пересылаться от ее конца, в порядке уменьшения номеров ее байтов. Команды не воздействует на флаги процессора.
Пример 1:
;В полях данных основного сегмента данных, ;адресуемого через DS: txt db 'Урок 1'; Пересылаемая строка txt_len equ S-txt; Ee длина ;В 'полях данных дополнительного сегмента данных, ;адресуемого через ES: string db 80 dup (' ') ;В программном сегменте: lea SI,txt; DS:SI › txt lea DI,string+10.; ES:DI › string+10 сld; Движение по строке вперед mov CX,txt_len; Столько байтов переслать rep movsb; Пересылка
Пример 2:
;В полях данных сегмента данных, адресуемого через DS: txt db 'А',84h, 'В',84h, 'A',84h, 'P', db 84h,'И',84h,'Я',84h,'!',84h txt_len=$-txt; B программном сегменте: mov AX,0B800h; Сегментный адрес видеобуфера mov ES,AX; Инициализируем ES ;Выведем на экран текст mov DI,1672; Смещение к середине экрана lea SI,txt; DS:SI ® txt сld; Движение по строке вперед mov CX,txt_len/2; Столько слов переслать rep movsw; Пересылка в середину экрана ;красной мерцающей (атрибут 84h) надписи 'АВАРИЯ!'