Флаги не меняются.
Команда:
MOVSB
Логика:
(ES:DI) = (DS:SI) if DF = 0 SI = SI + 1 DI = DI + 1 else SI = SI - 1 DI = DI - 1
Эта команда пересылает байт, расположенный по адресу DS:SI, по адресу ES:DI. После пересылки SI и DI инкрементируются (если флаг направления сброшен) или декрементируются (если флаг направления установлен),чтобы указатель переместился на следующий байт.
Операнды | Такт байты (слова) | Обращения | Байты | Пример |
нет операндов | 18 | 2 | 1 | MOVSB |
(повтор) | 9+17 | /rep 2/rep | 1 | REP MOVSB |
Пример.
Предположим, что строка BUFFER1 была где-то в программе описана следующим образом:
BUFFER1 DB 100 DUP (?)
Тогда следующий пример описывает пересылку 100 байтов из BUFFER1 в BUFFER2:
CLD ;Двигаемся в прямом направлении LEA SI,BUFFER1 ;Адрес исходной строки засылаем в SI LEA DI,BUFFER2 ;Адрес строки назначения засылаем в DI MOV CX,100 ;CX используем в префиксе REP REP MOVSB ;Производим пересылку