Язык ASSEMBLER Команды пересылки данных Лекция доцента кафедры ИВТ ГрГУ кандидата технических наук Ливак Е.Н.
Команды пересылки данных общего назначения mov, mov, xchg, xchg,
mov – основная команда пересылки данных Схема команды:Схема команды: mov приемник, источник mov приемник, источник Назначение:Назначение: пересылка данных между регистрами или регистрами и памятью. Алгоритм работы:Алгоритм работы: копирование второго операнда в первый операнд. Состояние флагов после выполнения команды:Состояние флагов после выполнения команды: выполнение команды не влияет на флаги
ПРИМЕРЫ Per1 dw 100; 0000 – адрес Per1 Per2 dw 200; 0002 – адрес Per2 Per3 dd 10257h; 0004 – адрес Per3 mov cx, Per1 cx =64 16 mov bx, offset Per1 bx mov bx, offset Per2 bx mov ax, bx ax bx
ПРИМЕРЫ Per1 dw 100; 0000 – адрес Per1 Per2 dw 200; 0002 – адрес Per2 Per3 dd 10257h; 0004 – адрес Per3 mov cx, Per2 cx =c8 16 mov ch, 20h cx ch cl ch cl 00 c8 20 c8
ПРИМЕРЫ Per1 dw 100; 0000 – адрес Per1 Per2 dw 200; 0002 – адрес Per2 Per3 dd 10257h; 0004 – адрес Per3 mov ax, offset Per2 ax mov al,5 ax ah al mov ah,10+15 ax =19 16 mov ax, -1 ax-1 = FFFF FF
ПРИМЕРЫ ОШИБОК Per1 dw 100; 0000 – адрес Per1 Per2 dw 200; 0002 – адрес Per2 Per3 dd 10257h; 0004 – адрес Per3 mov dh, Per1 - constant too large mov dx, Per1 mov dx, Per1 mov dh, 1254h - constant too large mov dx, 1254h mov dx, 1254h mov ah, Fh - Undefined symbol Fh - идентификатор с точки зрения транслятора Fh - идентификатор с точки зрения транслятора mov ah, OFh mov ah, OFh
Особенности применения команды mov 1.нельзя осуществить пересылку из одной области памяти в другую mov Per1, Per2 illegal memory reference need register in expression нужно использовать в качестве промежуточного буфера любой доступный в данный момент регистр общего назначения нужно использовать в качестве промежуточного буфера любой доступный в данный момент регистр общего назначения mov ax, Per2 mov Per1, ax
Фрагмент программы masm model small.data x db 5 y db ?.codestart:... mov al,x mov al,x mov y,al mov y,al end start
Особенности применения команды mov 2. нельзя загрузить в сегментный регистр значение непосредственно из памяти mov ds, Perem для выполнения такой загрузки нужно использовать промежуточный объект. для выполнения такой загрузки нужно использовать промежуточный объект. Это может быть регистр общего назначения или стек mov ax, Perem mov ds, ax mov ds, ax
Стандартное начало программы masmmasm Model smallModel small.stack100h.stack100h.data.data.code.code start:start: - переменная - переменная movds,axmovds,ax movax,4c00h ; стандартный выход - ah=00hmovax,4c00h ; стандартный выход - ah=00h int21hint21h endstartendstart
Особенности применения команды mov 3. нельзя переслать содержимое одного сегментного регистра в другой сегментный регистр. (в системе команд нет соответствующей операции) mov es, ds использовать в качестве промежуточных все те же регистры общего назначения использовать в качестве промежуточных все те же регистры общего назначения mov ax, ds mov ax, ds mov es, ax mov es, ax
Особенности применения команды mov 4. нельзя использовать сегментный регистр cs в качестве операнда назначения. mov сs, ax mov сs, ax mov cs, 100 Пара cs:ip всегда содержит адрес команды, которая должна выполняться следующей. изменение командой mov содержимого регистра cs фактически означало бы операцию перехода, а не пересылки, что недопустимо. изменение командой mov содержимого регистра cs фактически означало бы операцию перехода, а не пересылки, что недопустимо.
Особенности применения команды mov Совет желательно использовать в качестве одного из операндов регистр al/ax/eax в этом случае TASM генерирует более быструю форму команды mov mov al,5 mov al,5 mov bl,al mov bl,al
Команда XCHG (eXCHanGe) для двунаправленной пересылки данныхдля двунаправленной пересылки данных xchg ax, bx xchg ax, bx обменять содержимое регистров ax и bx обменять содержимое регистров ax и bx можно, конечно,можно, конечно, mov dx, ax mov ax, bx mov bx, dx но операция обмена используется довольно часто, разработчики системы команд микропроцессора посчитали нужным ввести отдельную команду обмена xchgно операция обмена используется довольно часто, разработчики системы команд микропроцессора посчитали нужным ввести отдельную команду обмена xchg
Команда XCHG !! Операнды должны иметь один тип!! Операнды должны иметь один тип xchg ax, bl xchg ax, bl !! Не допускается (как и для всех команд ассемблера) обменивать между собой содержимое двух ячеек памяти!! Не допускается (как и для всех команд ассемблера) обменивать между собой содержимое двух ячеек памяти xchg Per1, Per2 xchg Per1, Per2
Пример ;поменять порядок следования байт в слове ch1 label byte dw 0f85ch[ch1]=5c, [chl+1]=f8 dw 0f85ch[ch1]=5c, [chl+1]=f8... mov al,ch1al = 5c mov al,ch1al = 5c xchg ch1+1,alal = f8, [chl+1]=5c xchg ch1+1,alal = f8, [chl+1]=5c mov ch1,al [ch1]=f8 mov ch1,al [ch1]=f8 5c f 8 f 8 5 c