Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка Программир на ассемблере.doc
Скачиваний:
8
Добавлен:
17.09.2019
Размер:
605.7 Кб
Скачать

7.1.1.2. Xchg - перестановка

Команда XCHG переставляет два байта или два слова между двумя регистрами или между регистром и ячейкой памяти

Имеет два формата:

1) XCHG ac, reg

10010 reg

2) XCHG reg 1, reg 2

XCHG reg, mem

1000011 wmod reg r/m

Пример:

AH = A8, DL= FF

XCHG AH, DL

AH = FF, DL = A8

Примечания:

1. В команде XCHG нельзя указывать сегментные регистры.

2. Команда XCHG AX, AX используется как команда пустой операции NOP.

7.1.1.3. Xlat - перекодировка

Команда XLAT перекодирует байты в другой формат.

Например, при переводе нижнего регистра в верхний или при перекодировке ASCII-кода.

Формат команды:

11010111

Алгоритм выполнения команды XLAT состоит из 2 шагов:

1. Прибавить содержимое регистра AL к содержимому регистра BX;

2. Использовать результат как смещение в сегменте данных (относительно DS) и поместить адресуемый байт из памяти в регистр AL.

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

Команды LEA, LDS, LES отличаются от других команд пересылки тем, что при их выполнении в адресуемый регистр передается не собственно данные, а адреса.

7.1.1.4. LEA - загрузка эффективного адреса в регистр

Команда LEA загружает в указанный регистр эффективный адрес ячейки памяти

Формат команды:

LEA reg, mem

10001101mod reg r/m

Эта команда применяется для инициализации регистров перед выполнением цепочечных команд.

Пример:

BX = 0500

SI = 0010

LEA BX, [BX + SI]

BX = 0510

7.1.1.5. LDS - загрузка регистра сегмента данных

Команда LDS загружает в указанный регистр содержимое ячейки памяти, а в сегментный регистр DS - следующую ячейку памяти (слово)

Эта команда обеспечивает быструю загрузку дальнего адреса.

Формат команды:

LDS reg, mem

11000101mod reg r/m

Пример:

DS = 0000 [C0010] = 0180

DI = 0010 [C0012] = 2000

LDS SI, [DI]

SI = 0180

DS = 2000

7.1.1.6. LES - загрузка регистра дополнительного сегмента

Команда LES загружает в указанный регистр содержимое ячейки памяти, а в сегментный регистр ES - следующую ячейку памяти.

Эта команда обеспечивает быструю загрузку далекого адреса.

Формат команды:

LES reg, mem

11000100mod reg r/m

Если mod = 11, действия команд LEA, LDS, LES не определены.

Обычно в команде LDS указывается регистр SI, а в команде LES регистр DI, так как в цепочечных командах регистр SI ассоциируется с регистром DS, а регистр DI с регистром ES.

Основное применение команд LEA, LDS и LES - это инициализация регистров перед выполнением цепочечных команд.

При выполнении команды загрузки эффективного адреса

LEA reg, mem

вычисляется эффективный адрес памяти (в соответствии с указанным режимом адресации) и его значение, (а не адресуемое им слово памяти) загружается в указанный регистр. Такая операция может потребоваться, например, для загрузки в регистр BX начального адреса таблицы, которая необходима для выполнения команды XLAT.

Пример:

[BX] = 0400

[SI] = 003C

LEA BX, [BX + SI]

[BX] = 043C

Команды LDS и LES выполняют почти одни и те же действия: вычисляется эффективный адрес памяти, который суммируется с содержимым регистра DS, затем слово из памяти по полученному адресу загружается в указанный регистр, а следующее слово из памяти загружается в регистр DS (команда LDS) или ES (команда LES).

Пример:

[DS] = C000

[DI] = 0010

[C0010] = 0180

[C0012] = 2000

LDS SI, [DI]

[SI] = 0180

[DS] = 0200