Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Финогенов-основы_языка_ассемблера.doc
Скачиваний:
46
Добавлен:
17.09.2019
Размер:
3.35 Mб
Скачать

Xadd память, регистр

Рис. П13. Действие команды xadd.

Пример

;В полях данных

mem dw 99

;В программном сегменте

mov AX,48

xadd mcm,AX ;mem=138, AX=48

Xchg Обмен данными между операндами

Команда xchg пересылает значение первого операнда во второй, а второго — в первый. В качестве любого операнда можно указывать регистр (кроме сегментного) или ячейку памяти, однако не допускается опреде­лять оба операнда одновременно как ячейки памяти. Операнды могут быть байтами или словами и предстаачять числа со знаком или без знака. Ко­манда не воздействует на флаги процессора.

Пример 1

mov AX,OFF01h

mov SI,1000h

xchg AX,SI ;AX=01000h, SI=FF01h

Система команд процессоров Intel

283

Пример 2 ;В полях данных: mem dw OFOFOh ;В программном сегменте mov CX,1256h xchg CX,mem

Пример 3

mov АХ,603Ш xchg AH,AL

;CX=FOFOh, mem=1256h

;AX=3160h

386+ Допустимо использование 32-битовых операндов и дополнитель­ных режимов адресации 32-разрядных процессоров.

Пример

xchg

ESI,EDI

;ESI и EDI обмениваются содержимым

Xlat Табличная трансляция

Команда xlat осуществляет выборку байта из массива байтов, кото­рый в этом случае называют таблицей трансляции. В регистре ВХ должен находиться относительный адрес таблицы, а в регистре AL — смещение в таблице к выбираемому байту (его индекс). Выбранный байт загружается в регистр AL, замещая находившееся в нем смещение. Длина таблицы мо­жет достигать 256 байт. Таблица должна находиться в сегменте данных, адресуемом через сегментный регистр DS. Замена сегмента не допускается. Команда xlat не имеет параметров, но требует предварительной настрой­ки регистров ВХ и AL. Команда не воздействует на флаги процессора.

Пример

;Пример демонстрирует преобразование первых 14 скен-кодов

;(фактически это скен-коды клавиш верхнего ряда

;клавиатуры) в коды ASCII соответствующих символов

; В полях данных:

table db 0,27,'1234567890-=\';Таблица кодов ASCII

;В программном сегменте lea BX,table

mov AL,5 ;Скен-код 5 клавиши <4/$>

xlat ;AL—34h, код ASCII символа 4

386+ XLAT 386+ XUVTB

Команда xlatb эквивалентна команде xlat МП 86 за исключением того, что для 32-разрядных приложений относительный адрес таблицы разме­щается в расширенном регистре ЕВХ.

Команда xlat может иметь в качестве операнда относительный адрес таблицы трансляции; в этом случае помещение адреса таблицы в регистр ЕВХ не требуется. Действие команды от этого не изменяется, однако воз­можна замена сегмента.

284 Приложение

Пример

;В сегменте, адресуемом через сегментный регистр ES: table db 0,27,'Ш4567890-=\';Таблица кодов ASCII ;В программном сегменте

mov AL,13 ;Скен-код И клавиши <=/+>

xlat ES:table ;AL=3Dh, код ASCII символа =

Xor Логическое исключающее или

Команда хог выполняет операцию логического (побитового) ИСКЛЮ­ЧАЮЩЕГО ИЛИ над своими двумя операндами. Результат операции за­мещает первый операнд; второй операнд не изменяется. Каждый бит ре­зультата устанавливается в 1, если соответствующие биты операндов раз­личны, и сбрасывается в 0, если соответствующие биты операндов совпадают.

В качестве первого операнда команды хог можно указывать регистр (кроме сегментного) или ячейку памяти, в качестве второго — регистр (кроме сегментного), ячейку памяти или непосредственное значение, однако не допускается определять оба операнда одновременно как ячей­ки памяти. Операнды могут быть байтами или словами. Команда воздей­ствует на флаги OF, SF, ZF, PF и CF, причем флаги OF и CF всегда сбрасываются, а остальные флаги устанавливаются в зависимости от ре­зультата.

Правила побитового ИСКЛЮЧАЮЩЕГО ИЛИ:

Первый операнд-бит 0101 Второй операнд-бит 0011 Бит результата 0110

Пример 1

mov AX,OFh

хог AX,OFFFFh ;AX=FFFOh

Пример 2

хог ВХ,ВХ ;Обнуление ВХ

Пример 3

mov SI,OAAAAh

mov BX,5555h

xor SI,BX ;SI=FFFFh,BX=5555h

386+ Допустимо использование 32-битовых операндов и дополнитель­ных режимов адресации 32-разрядных процессоров.

Пример

mov EAX,4444AAAAh

or EAX,4441AAACh ;EAX=4445AAAEh