Слайд 2
Команды пересылки данных
общего назначения
mov ,
xchg ,
Слайд 3
mov –
основная команда пересылки данных
Схема команды:
mov приемник,
источник
Назначение:
пересылка данных между регистрами или регистрами и памятью.
Алгоритм работы:
копирование второго операнда в первый операнд.
Состояние флагов после выполнения команды:
выполнение команды не влияет на флаги
Слайд 4
ПРИМЕРЫ
Per1 dw 100 ; 0000 – адрес Per1
Per2 dw
200 ; 0002 – адрес Per2
Per3 dd 10257h ; 0004 –
адрес Per3
mov cx, Per1 cx 10010=6416
mov bx, offset Per1 bx
mov bx, offset Per2 bx
mov ax, bx ax bx
00 64
00 00
00 02
00 02
00 02
Слайд 5
ПРИМЕРЫ
Per1 dw 100 ; 0000 – адрес Per1
Per2 dw
200 ; 0002 – адрес Per2
Per3 dd 10257h ; 0004 –
адрес Per3
mov cx, Per2 cx 20010=c816
mov ch, 20h cx
ch cl
00 c8
20 c8
Слайд 6
ПРИМЕРЫ
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 2510=1916
mov ax, -1 ax -1 = FFFF
00 02
19 05
00 05
FF FF
Слайд 7
ПРИМЕРЫ ОШИБОК
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 dh, 1254h - constant too large
⇒ mov dx, 1254h
mov ah, Fh - Undefined symbol
Fh - идентификатор с точки зрения транслятора
⇒ mov ah, OFh
Слайд 8
Особенности применения команды mov
нельзя осуществить пересылку из
одной области памяти в другую
mov Per1, Per2
illegal memory
reference
need register in expression
⇒ нужно использовать в качестве промежуточного буфера любой доступный в данный момент регистр общего назначения
mov ax, Per2
mov Per1, ax
Слайд 9
Фрагмент программы
masm
model small
.data
x db 5
y db ?
.code
start:
...
mov
al,x
mov y,al
...
end start
Слайд 10
Особенности применения команды mov
2. нельзя загрузить в
сегментный регистр значение непосредственно из памяти
mov ds, Perem
⇒
для выполнения такой загрузки нужно использовать промежуточный объект.
Это может быть регистр общего назначения или стек
mov ax, Perem
mov ds, ax
Слайд 11
Стандартное начало программы
masm
Model small
.stack 100h
.data
.code
start:
mov ax,@data ;@data -
переменная
mov ds,ax
mov ax,4c00h ; стандартный выход - ah=00h
int 21h
end start
Слайд 12
Особенности применения команды mov
3. нельзя переслать содержимое
одного сегментного регистра в другой сегментный регистр.
(в системе
команд нет соответствующей операции)
mov es, ds
⇒ использовать в качестве промежуточных все те же регистры общего назначения
mov ax, ds
mov es, ax
Слайд 13
Особенности применения команды mov
4. нельзя использовать сегментный
регистр cs в качестве операнда назначения.
mov сs,
ax
mov cs, 100
Пара cs:ip всегда содержит адрес команды, которая должна выполняться следующей.
⇒ изменение командой mov содержимого регистра cs фактически означало бы операцию перехода, а не пересылки, что недопустимо.
Слайд 14
Особенности применения команды mov
Совет
желательно использовать в
качестве одного из операндов регистр al/ax/eax
в этом случае TASM
генерирует более быструю форму команды mov
mov al,5
mov bl,al
Слайд 15
Команда XCHG (eXCHanGe)
для двунаправленной пересылки данных
xchg ax,
bx
обменять содержимое регистров
ax и bx
можно, конечно,
mov dx, ax
mov ax, bx
mov bx, dx
но операция обмена используется довольно часто, разработчики системы команд микропроцессора посчитали нужным ввести отдельную команду обмена xchg
Слайд 16
Команда XCHG
!! Операнды должны иметь один тип
xchg ax,
bl
!! Не допускается (как и для всех команд ассемблера)
обменивать между собой содержимое двух ячеек памяти
xchg Per1, Per2