Команды пересылки данных

Основная команда пересылки данных – команда MOV (от англ. MOVe – перенести). Формат команды показан на рис.7.1.

Команды пересылки данных - student2.ru

Рис. 7.1. Формат команды MOV

Данная команда копирует значение операнда-источника в операнд-приемник. На состояние флагов выполнение команды влияния не оказывает. Пример записи команды:

MOV AX,BX

MOV CX,field1

MOV DX,[BX]

Командой MOV нельзя пересылать данные из одной области памяти в другую. Для этого необходимо использовать промежуточный регистр общего назначения. Для записи значения в сегментный регистр также необходимо использовать промежуточный регистр общего назначения или стек. В команде MOV нельзя использовать сегментный регистр CS в качестве операнда назначения. Так как пара регистров СS:IP содержит физический адрес команды, которая должна выполняться следующей, то при модификации регистра CS фактически реализуется не пересылка, а переход на другую команду, что недопустимо.

Очень важно, чтобы операнды команды MOV совпадали по размеру. Однако при работе с памятью (при косвенной адресации) возникает сложность. Пусть в регистре BX содержится адрес некоторых данных, которые необходимо записать в регистр AX. Команда MOV в данном случае будет записываться как

MOV AX,[BX]

Однако в данном случае непонятно, что адресует регистр BX в памяти – байт, слово и т.д. Транслятор сам принимает решение по размеру большего операнда, но в некоторых случаях может быть получено предупреждающее сообщение о несовпадении типов операндов.

Для переопределения и согласования размеров операндов необходимо использовать оператор ptr. Формат оператора приведен на рис.7.2.

Команды пересылки данных - student2.ru

Рис. 7.2. Формат оператора ptr

Тип может принимать одно из следующих значений: byte, word, dword, qword, short (для переходов).

Правильно команду пересылки необходимо записывать следующим образом:

MOV AX, word ptr [BX] ;Если BX адресует слово в памяти

MOV byte ptr [BX],27 ;Если BX адресует байт в памяти

per1 DD 4AFE7BA1H

MOV AL,byte ptr per1+1 ;Пересылка старшего байта младшего слова из ;двойного слова (7BH)

В последнем примере реализовано обращение только к старшему байту младшего слова переменной. Если попытаться сделать это командой MOV AL,per1+1, то транслятор выведет сообщение о несовпадении типов операндов (ошибка).

Для обмена значениями двух операндов можно использовать несколько команд MOV, а можно использовать команду XCHG (от англ. eXCHanGe – обмен), формат которой приведен на рис.7.3.

Команды пересылки данных - student2.ru

Рис. 7.3. Формат команды XCHG

На состояние флагов выполнение команды влияния не оказывает. Операнды должны иметь один тип. Обменивать между собой содержимое двух ячеек памяти нельзя. Например:

XCHG AX,BX ;Обменять содержимое регистров AX и BX

XCHG DX, word ptr [SI] ;Обменять содержимое регистра AX

;и слова в памяти по смещению, хранящемуся в регистре SI

Наши рекомендации