Флаги не меняются.
Команда:
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,source | 18(26) | 2 | 1 | MOVS WD_BF,INPUT |
(повтор) dest,source | 9+17(25) | /rep 2/rep | 1 | REP 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 ;Производим пересылку