Иллюстрированный самоучитель по Assembler


MOVS Пересылка данных из строки в строку - часть 3


lea DI,fname[ВХ] ;Смещение завершающего 0

rep movsb ;Перешлем все имя (от конца к началу)

386+ MOVSD Пересылка двойного слова из строки в строку


Команда аналогична командам МП 86 movsb и movsw, но позволяет скопировать двойное слово из строки, адресуемой через регистры DS:ESI, в строку, адресуемую через регистры ES:EDI.

Пример 1


;В полях данных сегмента, адресуемого через DS

strl db '01234567890ABCDEF' ;Строка-источник

str2 db 16 dup(?) ;Строка-приемник

;B программном сегменте

push DS

pop ES ;Теперь ES=DS

mov SI,offset strl ;DS:SI ®strl

mov DI,offset str2 ;ES:DI -> str2

сld ;Движение по строке вперед

mov CX,4 ;Коэффициент повторения

rep movsd ;Копирование по 4*4 байт

386+ MOVSX Пересылка с расширением знака


Команда пересылает байт в слово или двойное слово, а также слово в двойное слово с расширением знака. В качестве первого операнда (приемника) может использоваться 16- или 32-разрядный регистр общего назначения, в качестве второго - 8- или 16-разрядный регистр общего назначения или ячейка памяти такого же размера. Недопустима пересылка из памяти в память, в или из сегментного регистра, а также непосредственного значения. Фактически команда movsx увеличивает размер как положительного, так и отрицательного числа, ни изменяя ни его значения, ни знака.

Пример 1


mov CL,-5 ;CL=FBh

movsxAX,CL ;AX=FFFBh


Пример 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

movsxAX,CL ;AX=0005h

Пример 2


mov CL,-5 ;CL=FBh

movsxAX,CL ;AX=00FBh

Пример 3


mov BL,80h ;BL=80h

movsxECX,BL ;ECX=00000080h

Пример 4


;B полях данных

mem dw 0FFFFh ;mem=FFFFh

;B программном сегменте

movsxEBX,mem ;EBX=0000FFFFh

 




Начало  Назад  Вперед



Книжный магазин