Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Команда MOV. Команда XCHG. Команда XLAT. Команда LEA




Команда MOV

Команда MOV пересылает байт или слово из ячеек памяти или регистров. Формат команды:

MOV < приемник>, < источник>

Байт или слово считывается из операнда-источника и записывается в операнд-приемник. Операндами команды могут быть регистры или адресные выражения с прямой и косвенной способами адресации. Операндами команды не могут быть два адресных выражения, но могут быть два регистра. Сегментный регистр CS не может быть операндом-приемником. При использовании в качестве операнда-приемника сегментных регистров DS, SS или ES, операнд-источник не может быть непосредственным значением. Оба операнда должны иметь одинаковый размер, например байт или слово. В качестве операнда-источника может использоваться непосредственное значение. В этом случае при использовании непосредственных значений меньших 256 и в качестве операнда-приемника адресных выражений с косвенной адресацией необходимо указать тип операнда (байт или слово). Для этого используются следующие синтаксические конструкции:

MOV BYTE PTR < адресное_выражение>, < значение> - пересылка байта

MOV WORD PTR < адресное_выражение>, < значение> - пересылка слова

 

Пересылка двойных слов не входит в систему команд МП 8086. При использовании адресного выражения в качестве одного операнда и регистра в качестве другого указывать тип адресного выражения не нужно, так как тип определяет используемый регистр.

В табл. 7 приведены примеры правильного и неправильного использования команды MOV. Примеры неправильного использования при трансляции вызовут сообщения об ошибках.

 

Таблица 7

Примеры использования команды MOV

Примеры правильного использования Примеры неправильного использования
MOV AX, 1234h MOV CS, AX
MOV AX, BX MOV 0400h, BL
MOV AX, CS MOV AL, DX
MOV CH, DL MOV [BX], [SI]
MOV AX, [BX + 2] MOV [DI], 432q
MOV [SI], AL MOV DX, BYTE PTR [BX + SI]
MOV [BP + DI], 0B800h MOV BYTE PTR [SI + 2], 257
MOV [BP + DI], DS MOV DS, 1010111010101110b

 

В табл. 8 показаны все возможные сочетания типов операндов для команды MOV. Строки соответствуют операнду-приемнику, а столбцы – операнду-источнику. Знаком ‘+’ обозначены сочетания операндов, для которых команда будет являться корректной.

 

Таблица 8

Сочетания типов операндов для команды MOV

  Регистры общего назначения Регистр CS Регистры DS, SS, ES Ячейка памяти Непосред-ственное значение
Регистры общего назначения + + + + +
Регистры DS, SS, ES + +
Ячейка памяти + + + +

Команда XCHG

Команда XCHG аналогична команде MOV, но обменивает значениями свои операнды. Формат команды

XCHG < операнд_1>, < операнд_2>

 

Правила выбора операндов команды XLAT такие же, как и для команды MOV. Нельзя только в качестве одного из операндов указывать сегментный регистр или непосредственный операнд (число). Пример команды XCHG:

XCHG AX, [BX]

 

В этом примере обмениваются значениями регистр AX и ячейка памяти по адресу, задаваемому значением регистра BX.

Команда XLAT

Команда XLAT записывает в регистр AL значение, взятое из таблицы, адресуемой регистровой парой DS: BX. При этом начальное значение регистра AL служит индексом в таблице. Регистр DS определяет сегмент, в котором располагается таблица, а регистр BX – смещение таблицы от начала сегмента. Таблица в данном случае представляет собой последовательность некоторого количества байт. Действие команды XLAT можно записать следующим образом: AL: = DS: [BX + AL], при этом выражение присваивания следует рассматривать как косвенную форму адресации, но в явном виде такой способ адресации использовать нельзя. Команда XLAT не имеет операндов.

Команду удобно использовать, когда нужно выполнить преобразование одного символа в другой по какой-либо таблице. Например, команду XLAT можно использовать для преобразования кодировок символов по кодовым таблицам.

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

Numbers DB ‘0123456789’

. . .

MOV AX, SEG Numbers

MOV DS, AX                     ; Инициализация регистра DS

MOV BX, OFFSET Numbers        ; настройка BX на начало таблицы

MOV AL, 5                        ; в AL число 5

XLAT                                  ; теперь в AL символ ‘5’

 

Команда LEA

Команда LEA загружает в 16-битный регистр адрес ячейки памяти. Для указанного в команде адресного выражения вычисляется смещение и записывается в указанный регистр. Формат команды:

LEA < имя_регистра>, < адресное выражение>

 

Регистр должен быть 16-битным (например, AX или DX) и не должен быть сегментным регистром. Адресное выражение может использовать прямую и косвенную адресацию, но использование прямой адресации с командой LEA нецелесообразно, так как в этом случае в регистр сразу записывается смещение, указанное в команде, что можно сделать с помощью директивы OFFSET. Адресное выражение может содержать и префикс замены сегмента, но он игнорируется командой LEA и его использование только увеличит длину машинного кода на 1 байт. Пример использования команды LEA:

LEA DX, [BX + SI + 2]

 

Вместо команды LEA в предыдущем примере можно использовать следующую последовательность команд:

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...