MOVS Пересылка строки (из байтов или слов)

Флаги не меняются.

Команда:

MOVS destination,source 

Логика:

(ES:DI) = (DS:SI)
                     if DF = 0
                         SI = SI + n ; n = 1 для байта, 2 - для слова
                         DI = DI + n
else
                         SI = SI - n
                         DI = DI - n

Эта команда пересылает байт или слово, расположенное по адресу DS:SI, по адресу ES:DI. После пересылки SI и DI инкрементируются (если признак направления сброшен) или декрементируются (если признак направления установлен),чтобы указатель переместился на следующий элемент строки.

Операнды Такт байты (слова)ОбращенияБайтыПример
dest,source18(26)21MOVS WD_BF,INPUT
(повтор) dest,source9+17(25)/rep 2/rep1REP MOVS W,I

Примечания:
Эта команда всегда ассемблируется или как MOVSB, пересылка строки из байтов, или как MOVSW, пересылка строки из слов, в зависимости от того, является ли source ссылкой на строку из байтов или строку из слов. В обоих случаях Вы должны в явном виде загрузить в регистры SI и DI смещения строк source и destination.

Пример.
Предположим, что строка BUFFER1 была где-то в программе описана следующим образом:

BUFFER1       DB      100 DUP (?)

Тогда следующий пример описывает пересылку 100 байтов из BUFFER1 в BUFFER2:

CLD                 		;Двигаемся в прямом направлении
LEA  SI,BUFFER1     		;Адрес исходной строки засылаем в SI
LEA  DI,BUFFER2     		;Адрес строки назначения засылаем в DI
MOV  CX,100         		;CX используем в префиксе REP
REP  MOVS BUFFER1,BUFFER2		;Производим пересылку
Hosted by uCoz