MOVS Пересылка данных из строки в строку
MOVSB Пересылка байта данных из строки в строку
MOVSW Пересылка слова данных из строки в строку
Команды предназначены для операций над строками (строкой называется последовательность
байтов или слов памяти с любым содержимым). Они пересылают по одному элементу
строки, который может быть байтом или словом. Первый операнд (приемник) адресуется
через ES:DI, второй (источник) - через DS:SI. Операцию пересылки можно условно
изобразить следующим образом:
(DS:SI) -> (ES:DI)
После каждой операции пересылки регистры SI и DI получают положительное (если флаг DF=0) или отрицательное (если флаг DF=1) приращение. Величина приращения составляет 1 или 2 в зависимости от размера пересылаемых элементов. Вариант команды movs имеет формат:
movs строка_1, строка_2
В этом случае байты или слова из строки строка_2 пересылаются на место строки строка_]. Размер пересылаемых элементов определяется описанием строк (с помощью директив 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
;В полях данных основного сегмента данных,
Пример 2
;В полях данных сегмента данных, адресуемого через DS:
Пример 3
;В полях данных сегмента данных, адресуемого через DS:
Пример 4
;В полях данных сегмента, адресуемого через DS
386+ MOVSD Пересылка двойного слова из строки в строку
Команда аналогична командам МП 86 movsb и movsw, но позволяет скопировать двойное
слово из строки, адресуемой через регистры DS:ESI, в строку, адресуемую через
регистры ES:EDI.
Пример 1
;В полях данных сегмента, адресуемого через DS
386+ MOVSX Пересылка с расширением знака
Команда пересылает байт в слово или двойное слово, а также слово в двойное слово
с расширением знака. В качестве первого операнда (приемника) может использоваться
16- или 32-разрядный регистр общего назначения, в качестве второго - 8- или
16-разрядный регистр общего назначения или ячейка памяти такого же размера.
Недопустима пересылка из памяти в память, в или из сегментного регистра, а также
непосредственного значения. Фактически команда movsx увеличивает размер как
положительного, так и отрицательного числа, ни изменяя ни его значения, ни знака.
Пример 1
mov CL,-5 ;CL=FBh
Пример 2
mov CL,+5 ;CL=05h
movsxAX,CL ;AX=0005h
Пример 3
mov BL,-128 ;BL=80h
movsxECX,BL ;ECX=FFFFFF80h
Пример 4
; В полях данных
mem dw -3 ;mem=FFFDh
;В программном сегменте
movsxEB-X,mem ; EBX=FFFFFFFDh
386+ MOVZX Пересылка с расширением нуля
Команда пересылает байт в слово или двойное слово, а также слово в двойное слово
с заполнением старших разрядов нулями. В качестве первого операнда (приемника)
может использоваться 16- или 32-разрядный регистр общего назначения, в качестве
второго - 8- или 16-разрядный регистр общего назначения или ячейка памяти такого
же размера. Недопустима пересылка из памяти в память, в или из сегментного регистра,
а также непосредственного значения. Фактически команда movzx увеличивает размер
числа, считая его числом без знака.
Пример 1
mov CL,5 ;CL=05h
Пример 2
mov CL,-5 ;CL=FBh
Пример 3
mov BL,80h ;BL=80h
Пример 4
;B полях данных