Особенности применения команды mov

  1. нельзя осуществить пересылку из одной области памяти в другую

mov Per1, Per2

illegal memory reference

need register in expression

Þ Если такая необходимость возникает, то нужно использовать в качестве промежуточного буфера любой доступный в данный момент регистр общего назначения.

mov ax, Per2

mov Per1, ax

Фрагмент программы

masmmodel small.datax db 5y db?.codestart:... mov al,x mov y,al...end start
  1. нельзя загрузить в сегментный регистр значение непосредственно из памяти
mov ds, Perem

Þ Поэтому для выполнения такой загрузки нужно использовать промежуточный объект.

Это может быть регистр общего назначения или стек.

mov ax, Perem mov ds, ax

Стандартное начало программы

masmModel small.stack 100h.data <описание данных>.codestart: mov ax,@data;@data - переменная mov ds,ax <команды> mov ax,4c00h int 21hend start
  1. нельзя переслать содержимое одного сегментного регистра в другой сегментный регистр.
mov es, ds

Это объясняется тем, что в системе команд нет соответствующего кода операции. Но необходимость в таком действии часто возникает.

Þ Выполнить такую пересылку можно, используя в качестве промежуточных все те же регистры общего назначения.

mov ax, ds mov es, ax
  1. нельзя использовать сегментный регистр cs в качестве операнда назначения.
mov сs, ax mov cs, 100

Причина здесь простая. Дело в том, что в архитектуре микропроцессора пара cs:ip всегда содержит адрес команды, которая должна выполняться следующей.

Þ Изменение командой mov содержимого регистра cs фактически означало бы операцию перехода, а не пересылки, что недопустимо.

Совет

желательно использовать в качестве одного из операндов регистр al/ax/eax

в этом случае TASM генерирует более быструю форму команды mov

mov al,5 mov bl,al

Команда XCHG (eXCHanGe)

Для двунаправленной пересылки данных применяют команду xchg.

xchg ax, bx

обменять содержимое регистров ax и bx

Для этой операции можно, конечно, применить последовательность из нескольких команд mov, но из-за того, что операция обмена используется довольно часто, разработчики системы команд микропроцессора посчитали нужным ввести отдельную команду обмена xchg.

mov dx, axmov ax, bxmov bx, dx

Команда XCHG

  • !! Операнды должны иметь один тип

xchg ax, bl

  • !! Не допускается (как и для всех команд ассемблера) обменивать между собой содержимое двух ячеек памяти

xchg Per1, Per2

Пример: поменять порядок следования байт в слове

ch1 dw 0f85ch [ch1]=5c, [chl+1]=f8... mov al,ch1 al = 5c xchg ch1+1,al al = f8, [chl+1]=5c mov ch1,al [ch1]=f8

Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: