Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Jazik_Assemblera_dlja_IBM_PC_i_programmir

.pdf
Скачиваний:
59
Добавлен:
27.03.2015
Размер:
2 Mб
Скачать

О п е р а ц и я: Загружает значение флагового регистра в регистр АН. Данная команда обеспечивает совместимость с процессором 8080. См. также команду SAHF. Команда LAHF заносит правый байт флагового регистра в регистр АН в следующем виде:

SZ * A * P * C (* обозначает неиспользуемые биты)

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: 10011111 (без операндов)

LDS: Загрузка регистра сегмента данных

 

----------------------------------------

данных и

О п е р а ц и я: Инициализирует начальный

адрес

сегмента

адрес смещения к переменной для обеспечения доступа к

данной

переменной.

Команда LDS загружает в необходимые регистры

четыре

байта

из области

памяти, содержащей

относительный адрес и сегментный адрес. Сегментный

адрес помещается в регистр DS, а относительный адрес - в

любой

из

общих

или индексных регистров или в регистровый

указатель.

Следующая

 

команда

загружает относительный адрес в регистр DI:

 

 

 

 

 

 

 

LDS

DI,адрес_памяти

 

 

 

 

 

 

 

 

Ф л а г и: Не

меняются.

 

 

 

 

 

 

 

 

О б ъ е к т н

ы й к о д: |11000101|modregr/m|

 

 

 

 

 

 

LES: Загрузка регистра дополнительного сегмента

 

 

 

-------------------------------------------------

 

 

 

О п е р а ц и я:

Инициализирует

начальный

адрес

дополнительного

сегмента и адрес смещения к переменной для .обеспечения доступа

к

данной

переменной. См. также команду LDS.

 

 

 

 

 

 

 

 

Ф л а г и: Не меняются.

 

 

 

 

 

 

 

 

О б ъ е к т н ы й

к о д: |11000100|modregr/m|

 

 

 

 

 

 

 

LOCK: Блокировка шины доступа к данным

 

 

 

 

----------------------------------------

 

одновременно

О п е р а ц и я:

Запрещает другим

(сопроцессорам

изменять элементы данных. Команда LOCK

представляет

собой

однобайтовый

префикс, который можно кодировать непосредственно

перед

любой

командой.

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

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: 11110000

LODS/LODSB/LODSW: Загрузка однобайтовой или двухбайтовой строки

-----------------------------------------------------------------

О п е р а ц и я: Загружает из памяти один байт в регистр AL или одно слово в регистр AХ. Несмотря на то, что команда LODS выполняет строковую операцию, нет смысла использовать ее с префиксом REP. Регистровая пара DS:SI адресует в памяти байт (для LODSB) или слово (для LODSW), которые загружаются в регистр AL или AХ соответственно. Если флаг DF равен нулю, то операция прибавляет 1 (для байта) или 2 (для слова) к регистру SI. Если флаг DF равен единице, то операция вычитает 1 (для байта) или 2 (для слова) из регистра SI.

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: 1010110w (без операндов).

LOOP: Цикл

------------

Оп е р а ц и я: Управляет выполнением группы команд определенное число раз. До начала цикла в регистр CX должно быть -загружено число выполняемых циклов. Команда LOOP находится в конце цикла, где она уменьшает значение в регистре СХ. на единицу. Если значение в регистре CX не равно нулю, то команда передает управление по адресу, указанному в операнде (прибавляет к регистру IP значение операнда); в противном случае управление передается на следующую после LOOP команду (происходит выход из цикла).

Фл а г и: Не меняются.

Об ъ е к т н ы й к о д: у11100010у--disp--у

 

LOOPE/LOOPZ: Цикл, если равно или нуль

 

 

 

 

-----------------------------------------

определенное

О п е р а ц и я: Управляет выполнением группы

команд

число раз или пока установлен флаг ZF (в

единичное

состояние).

Команды

LOOPE/LOOPZ

аналогичны

команде

LOOP,

за исключением того,

что по этим

командам цикл прекращается либо по нулевому значению в регистре

CX,

либо

по нулевому

значению флага ZF (ненулевое состояние).

См.

также команды

LOOPNE/LOOPNZ.

 

 

 

 

 

 

 

 

Ф л а г и: Не меняются.

 

 

 

 

 

 

 

О б ъ е к т н ы й

к о д: |11100001|--

disp--

|

 

 

 

 

 

LOOPNE/LOOPNZ: Цикл, если не равно или не нуль

 

 

 

 

------------------------------------------------

определенное

О п е р а ц и я: Управляет

выполнением группы

команд

число раз или пока сброшен флаг ZF (в нулевое состояние)., Команды

LOOPNE/LOOPNZ аналогичны команде LOOP за исключением

того, что по этим

командам цикл прекращается либо по нулевому значению в регистре

CX,

либо

по единичному значению флага ZF (нулевое

состояние).

См. также

команды

LOOPE/LOOPZ.

 

 

 

 

 

 

 

 

 

Ф л а г и: Не меняются.

 

 

 

 

 

 

 

О б ъ е к т н ы й

к о д: |11100000|--

disp--

|

 

 

 

 

MOV: Пересылка данных

-----------------------

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

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д (семь форматов):

Регистр/память в/из регистр: |100010dw|modregr/m|

Непосредственное значение в регистр/память:

|1100011w|mod000r/m|--data--|data если w=1|

Непосредственное значение в регистр: |1011wreg|--data--|data если w=1|

Память в регистр AX (AL): |1010000w|addr-low|addr-high|

Регистр AX (AL) в память: |1010001w|addr-low|addr-high|

Регистр/память в сегментный регистр: |10001110|mod0sgr/m| (sg - сегментный регистр)

Сегментный регистр в регистр/память: |10001100|mod0sgr/m| (sg - сегментный регистр)

MOVS/MOVSB/MOVSW: Пересылка строки байт или строки слов

---------------------------------------------------------

О п е р а ц и я: Пересылает данные между областями памяти. Команды MOVS(B/W) обычно используются с префиксом REP. Команда MOVSB пересылает любое число байтов, а команда MOVSW - любое число слов. Перед выполнением команды регистровая пара DS:SI должна адресовать источник пересылки ("откуда") а регистровая пара ES:DI - получатель пересылки ("куда"). Если флаг DF равен нулю, то операция пересылает данные слева направо и увеличивает регистры SI и DI. Если флаг DF равен единице то операция пересылает данные справа налево и уменьшает регистры SI и DI.

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: 1010010w (без операндов).

MUL: Беззнаковое умножение

----------------------------

О п е р а ц и я: Умножает беззнаковое множимое (8 или 16 бит) на беззнаковый множитель (8 или 16 бит). Левый единичный бит рассматривается

как бит данных, но не как знак минус

для отрицательных чисел.

Для

8-битового умножения множимое должно находиться в регистре AL, а множитель

возможен в регистре или в памяти, например MUL CL. Произведение получается

в регистре АХ. Для 16-битового умножения

множимое

должно

находиться

в

регистре АХ, а множитель возможен в регистре или в

памяти,

например

MUL

ВХ. Произведение получается в регистровой паре DX:AX. См.

также команду

IMUL.

 

 

 

 

Ф л а г и: Команда воздействует на флаги CF и OF (флаги AF, PF, SF

и

ZF не определены).

О б ъ е к т н ы й к о д: |1111011w|mod100r/m|

NEG: Изменение знака числа

----------------------------

Оп е р а ц и я: Меняет двоичное значение из положительного в отрицательное и из отрицательного в положительное. Команда NEG вычисляет двоичное дополнение от указанного операнда: вычитает операнд из нуля и прибавляет единицу. Операндом может быть байт или слово в регистре или в памяти. См. также команду NOT. Флаги: Команда воздействует на флаги AF, CF, OF, PF, SF и ZF.

Об ъ е к т н ы й к о д: |1111011w|mod011r/m|

NOP: Нет операции

-------------------

О п е р а ц и я: Применяется для удаления или вставки машинных кодов или для задержки выполнения программы. Команда NOP выполняет операцию XCHG АХ,АХ, которая ничего не меняет.

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: 10010000 (без операндов)

NOT: Логическое НЕТ

---------------------

О п е р а ц и я: Меняет нулевые биты на единичные и наоборот. Операндом может быть байт или слово в регистре или в памяти. См. также команду NEG.

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: |1111011w|mod010r/m|

OR: Логическое ИЛИ

--------------------

Оп е р а ц и я: Выполняет поразрядную дизъюнкцию (ИЛИ) над битами двух операндов. Операндами являются байты или слова в регистрах или в памяти, второй операнд может иметь непосредственное значение. Команда OR обрабатывает операнды побитово. Если любой из проверяемых бит равен единице, то бит в операнде 1 становится равным единице, в противном случае бит в операнде 1 не изменяется. См. также команды AND и XOR.

Фл а г и: Команда воздействует на флаги CF, OF, PF, SF и ZF (флаг AF неопределен).

Об ъ е к т н ы й к о д (три формата):

Регистр/память с регистром:

 

 

 

 

 

|000010dw|modregr/m|

 

 

 

 

 

Непосредственное с аккумулятором:

 

 

 

 

|0000110w|--

data--|data если w=1|

 

 

 

 

Непосредственное с регистром/памятью:

 

 

 

 

|1000000w|mod001r/m|--data--

|data если w=1|

 

 

OUT: Вывод байта или слова в порт

 

 

 

-----------------------------------

регистра

AL

или

О п е р а ц и я: Передает в выводной порт байт из

слово из регистра AХ.

Порт кодируется как фиксированный числовой

операнд

(OUT порт#,АХ) или как переменная в регистре DX

(OUT

DX.AX). Процессоры

80186, 80286 и 80386 имеют, кроме того,

команду

OUTS

(Output

String

-

вывод строки). См. также команду IN.

 

 

 

 

 

Ф л а г и: Не меняются.

 

 

 

 

 

О б ъ е к т н ы й

к о д (два формата):

 

 

 

 

Переменный порт:

|1110111w|

port |

 

 

 

 

Фиксированный порт:|1110011w|--

 

 

 

 

POP: Извлечение слова из стека

--------------------------------

О п е р а ц и я: Передает слово (помещенное ранее в стек) в указанный операнд. Регистр SP указывает на текущее слово в вершине стека. Команда POP извлекает слово из стека и увеличивает значение в регистре SP на 2. Существует три типа команды POP в зависимости от операнда: общий регистр, сегментный регистр, слово в памяти. См. также команду PUSH.

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д

(три формата):

Регистр:

|01011reg|

Сегментный регистр:

|000sg111| (sg-сегм.рег.)

Регистр/память:

|10001111|mod000r/m|

POPA: Извлечение из стека всех общих регистров (80188,80186,80286)

--------------------------------------------------------------------

О п

е р

а ц

и я:

Извлекает из стека восемь значений в регистры Dl, SI

BP, SP,

BX,

DX,

CX,

AX в указанной

последовательности

и увеличивает

регистр

SP

на

16.

Регистры обычно

записываются

в

стек

ранее

соответствующей командой PUSHA.

Ф л

а

г и: Не меняются.

 

 

 

 

О б ъ е к т н ы й

к о д: 01100001 (без операндов).

 

 

 

 

 

POPF: Извлечение флагов из стека

 

 

 

 

 

 

----------------------------------

 

 

 

флаговый

О п е р а ц и я: Передает биты (помещенные ранее в стек) во

регистр.

 

См. также команды PUSHF и POP. Регистр SP указывает

на

текущее

слово в вершине стека.

Команда POPF передает биты

из

этого

 

слова во

флаговый регистр и увеличивает значение в регистре SP на 2. Обычно команда

PUSHF записывает значения флагов в стек, а команда

POPF

восстанавливает

эти флаги.

 

 

 

 

 

 

Ф л а г и: Команда воздействует на все флаги.

 

 

 

 

О б ъ е к т н ы й к о д: 10011101 (без операндов).

 

 

 

 

 

 

PUSH: Занесение слова в стек

 

 

 

 

 

 

 

------------------------------

 

 

 

данных)

О п е р а ц и я: Сохраняет значение слова (адрес или элемент

в стеке для последующего использования. Регистр SP указывает

на

текущее

слово в вершине стека.

Команда PUSH уменьшает значение в регистре SP на 2

и передает слово из указанного операнда в новую вершину стека.

Существует

три типа команды PUSH в зависимости от операнда: общий регистр, сегментный регистр или слово в памяти. См. также команды POP и PUSHF.

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д (три формата):

Регистр: |01010reg|

Сегментный регистр: |000sg111| (sg-сегм.рег.)

Регистр/память: |11111111|mod110r/m|

PUSHA: Занесение в стек всех общих регистров (80188,80186,80286)

------------------------------------------------------------------

О п е р а ц и я: Записывает в стек восемь значений регистров AX, CX, DX, BX, SP, BP, SI, DI в указанной последовательности и уменьшает регистр SP на 16. Обычно команда POPA позже восстановит эти регистры из стека.

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: 01100000 (без операндов).

PUSHF: Занесение флагов в стек

--------------------------------

Оп е р а ц и я: Сохраняет значения флагов из флагового регистра в стеке для последующего использования. Регистр SP указывает на текущее слово в вершине стека. Команда PUSHF уменьшает значение в регистре SP на 2

ипередает флаги в новую вершину стека. См. также команды POPF и PUSH.

Фл а г и: Не меняются.

Об ъ е к т н ы й к о д: 10011100 (без операндов).

RCL и RCR: Циклический сдвиг влево через перенос и циклический сдвиг вправо через перенос

----------------------------------------------------

О п е р а ц и я: Выполняет циклический сдвиг битов (ротацию) влево или вправо через флаг CF. Данные операции могут выполняться в байте или в слове, в регистре или в памяти. Ротация на один бит кодируется в команде значением 1; ротация более чем на один бит требует указания регистра CL, который содержит счетчик. Для команды RCL значение флага CF записывается в бит 0, а. самый левый бит записывается во флаг CF; все другие биты сдвигаются влево. Для команды RCR значение флага CF записывается в самый левый бит, а бит 0 записывается во флаг CF; все другие биты сдвигаются вправо. См. также команды ROL и ROR.

Ф л а г и: Команда воздействует на флаги CF и OF.

О б ъ е к т н ы й к о д: RCL: |110100cw|mod010r/m| RCR: |110100cw|mod011r/m|

(если с = 0, то сдвиг на 1; если с = 1, то сдвиг на CL).

REP/REPE/REPZ/REPNE/REPNZ: Повтор строковой операции

------------------------------------------------------

О п е р а ц и я: Повторяет строковую операцию определенное число раз.

Используется в качестве префикса повторения

перед строковыми

командами

CMPS, MOVS, SCAS, STOS. Счетчик повторений должен быть загружен в регистр

CX до выполнения строковой команды. Операция уменьшает регистр CX на 1 при

каждом выполнении строковой команды. Для

префикса

REP

операция

повторяется, пока содержимое регистра CX не достигнет нуля.

Для

префикса

REPE/REPZ операция повторяется, пока регистр CX содержит

ненулевое

значение и флаг ZF равен 1 (нулевое состояние). Для префикса REPNE/REPNZ

операция повторяется, пока регистр CX содержит ненулевое значение

и флаг

ZF равен 0 (ненулевое состояние).

 

 

 

Фл а г и: Определяются соответствующей строковой командой.

Об ъ е к т н ы й к о д: REP/REPNE: 11110010

REPE: 11110011

RET: Возврат из процедуры

---------------------------

Оп е р а ц и я: Возвращает управление из процедуры, вызванной ранее командой CALL. Команда CALL может передавать управление внутри одного сегмента или между сегментами. Команда RET заносит слово из вершины стека

врегистр IP и увеличивает значение SP на 2. Для межсегментного возврата команда RET, кроме того, заносит слово из новой вершины стека в регистр CS и еще раз увеличивает значение SP на 2. Любой числовой операнд команды (например, RET 4) прибавляется к указателю стека SP.

Фл а г и: Не меняются.

Об ъ е к т н ы й к о д (четыре формата):

Внутри

сегмента:

|11000011|

 

 

Внутри

сегмента с операндом:

|11000010|data-low|data-high|

Между сегментами:

|11001011|

 

 

Между сегментами с операндом: |11001010|data-low|data-high|

ROL и ROR: Циклический сдвиг влево и циклический сдвиг вправо

---------------------------------------------------------------

О п е р а ц и я: Выполняет циклический сдвиг

битов

(ротацию) влево

или вправо. Данные операции могут выполняться в

байте

или в слове, в

регистре или в памяти. Ротация на один бит кодируется в команде значением

1; ротация более чем на один бит требует указания

регистра CL,

который

содержит счётчик. Для команды ROL самый левый бит

записывается в

бит

0;

все другие биты сдвигаются влево. Для команды ROR

бит 0 записывается

в

самый левый бит; все другие биты сдвигаются вправо.

См. также команды RCL

иRCR.

Фл а г и: Команда воздействует на флаги CF и OF.

О б ъ е к т н ы й к о д: ROL: |110100cw|mod000r/m| ROR: |110100cw|mod001r/m|

(если с = 0, то сдвиг на 1; если с = 1, то сдвиг на CL).

SAHF: Установка флагов из регистра АН

---------------------------------------

О п е р а ц и я: Данная команда обеспечивает совместимость с процессором 8080 для пересылки значений флагов из регистра АН во флаговый регистр. См. также команду LAHF. Команда SAHF пересылает определенные биты из регистра АН во флаговый регистр в следующем виде:

SZ * A * P * C (* обозначает неиспользуемые биты)

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: 10011110 (без операндов)

SAL, SAR, SHL и SHR: Сдвиг влево или вправо

 

 

 

 

---------------------------------------------

 

Данные

О п е р а ц и я: Выполняет сдвиг

битов

влево

или

вправо.

операции могут выполняться в байте или в слове, в регистре или

в

памяти.

Сдвиг на один бит кодируется в команде значением 1;

сдвиг

более

чем

на

один бит требует указания регистра CL, который

содержит

счетчик

сдвига.

Команда SAR выполняет арифметический сдвиг, который учитывает

знак

сдвигаемого значения.

Команды SHL и

SHR выполняют

логический

сдвиг

и

рассматривают знаковый бит как обычный бит данных. Команда SAL выполняется

аналогично команде SHL. Команды SAL и SHL сдвигают биты влево определенное

число раз и правый освобождающийся бит заполняют нулевым

значением.

Команда SHR сдвигает

биты вправо

определенное

число

раз

и

левый

освобождающийся бит заполняет нулевым значением. Команда SAR сдвигает биты вправо определенное число раз и левый освобождающийся бит заполняет значением знакового бита (0 или 1). Во всех случаях значения битов, выдвигаемых за разрядную сетку, теряются.

Ф л а г и: Команда воздействует на флаги CF, OF, PF, SF и ZF (флаг AF не определен).

О б ъ е к т н ы й к о д: SAL/SHL: |110100cw|mod100r/m| SAR: |110100cw|mod111r/m| SHR: |110100cw|mod101r/m|

(если с = 0, то сдвиг на 1;

если с=1, то сдвиг на CL);

SBB: Вычитание с заемом

-------------------------

О п е р а ц и я: Обычно используется при вычитании многословных двоичных величин для учета единичного бита переполнения в последующей фазе операции. Если флаг CF установлен в 1, то команда SBB сначала вычитает 1 из операнда 1. Команда SBB всегда вычитает операнд 2 из операнда 1, аналогично команде SUB. См. также команду ADC.

Ф л а г и: Команда воздействует на флаги AF, CF, OF, PF. SF и ZF.

О б ъ е к т н ы й к о д (три формата):

Регистр из регистра или памяти: |000110dw|modregr/m| Непосредственное значение из регистра AX (AL):

|0001110w|--data--|data, если w=1|

Непосредственное значение из регистра или памяти: |100000sw|mod011r/m|--data--|data, если sw=01|

SCAS/SCASB/SCASW: Поиск байта или слова в строке

--------------------------------------------------

О п е р а ц и я: Выполняет поиск определенного байта или слова в строке. Для команды SCASB необходимое значение загружается в регистр AL, а для команды SCASW - в регистр AX. Регистровая пара ES:DI указывает на строку в памяти, которая должна быть сканирована. Данные команды обычно используются с префиксом REPE или REPNE. Если флаг DF равен нулю, то операция сканирует память слева направо и увеличивает регистр DI. Если флаг DF равен единице, то операция сканирует память справа налево и уменьшает регистр DI.

Ф л а г и: Команда воздействует на флаги AF, CF, OF, PF, SF и ZF.

О б ъ е к т н ы й к о д: 1010111w (без операндов).

STC: Установка флага переноса

-------------------------------

О п е р а ц и я: Устанавливает значение флага CF в 1. См. также команду STD.

Ф л а г и: Команда воздействует на флаг CF (устанавливается в 1).

О б ъ е к т н ы й к о д: 11111001 (без операндов).

STD: Установка флага направления

----------------------------------

О п е р а ц и я: Устанавливает значение флага направления в 1. В результате строковые операции, такие, как MOVS или CMPS, обрабатывают данные справа налево. См. также CLD.

Ф л а г и: Команда воздействует на флаг DF (устанавливается в 1).

О б ъ е к т н ы й к о д: 11111101 (без операндов).

STI: Установка флага прерывания

---------------------------------

О п е р а ц и я: Разрешает маскируемые внешние прерывания после выполнения следующей команды и устанавливает значения флага прерывания IF в 1. См. также команду CLI.

Ф л а г и: Команда воздействует на флаг IF (устанавливается в 1).

О б ъ е к т н ы й к о д: 11111011 (без операндов).

STOS/STOSB/STOSW: Запись однобайтовой или двухбайтовой строки

---------------------------------------------------------------

О п е р а ц и я: Сохраняет байт или слово в

памяти. При использовании

префикса REP операция дублирует

значение байта

или

слова

определенное

число раз, что делает ее удобной для очистки областей памяти.

Для команды

STOSB необходимый байт загружается в регистр

AL, а

для команды

STOSW

необходимое слово загружается в регистр АХ.

Регистровая пара ES:DI

указывает область памяти, куда должен быть записан байт

или

слово.

Если

флаг DF равен нулю, то операция

записывает

в

память

слева

направо и

увеличивает регистр DI. Если флаг DF равен единице, то

операция записывает

впамять справа налево и уменьшает значение в регистре DI.

Фл а г и: Не меняются.

О б ъ е к т н ы й к о д: 1010101w (без операндов).

 

SUB: Вычитание двоичных чисел

 

 

 

 

 

-------------------------------

регистре,

памяти

или

О п е р а ц и я: Вычитает байт или

слово в

непосредственное значение из регистра;

или

вычитает байт

или

слово

в

регистре или непосредственное значение из памяти. См. также команду SBB.

Ф л а г и: Команда воздействует на флаги AF, CF, OF, PF, SF и ZF.

 

О б ъ е к т н ы й

к о д (три формата):

 

 

 

 

 

Регистр из регистра или памяти:

 

 

 

 

 

 

|001010dw|modregr/m|

 

 

 

 

 

 

 

Непосредственное значение из регистра АХ (AL):

 

 

 

 

|0010110w|--data--|data, если w=1|

 

 

 

 

 

Непосредственное значение из регистра или памяти:

 

 

 

 

|100000sw|mod101r/m|--data--|data, если sw=01|

 

 

 

 

TEST: Проверка битов

 

 

 

 

 

О п е р а ц и я:

----------------------

байта

или

слова

на

Команда

выполняет

проверку

определенную битовую комбинацию. Команда TEST действует аналогично команде

AND, но не изменяет результирующий операнд. Операнды

могут

иметь

однобайтовые или двухбайтовые

значения.

Второй

операнд

может

иметь

непосредственное значение. Команда выставляет флаги в соответствии с логической функцией И.

Ф л а г и: Команда воздействует на флаги CF, OF, PF, SF и ZF (флаг AF не определен).

О б ъ е к т н ы й к о д (три формата):

Регистр или память И регистр: |1000010w|modregr/m|

Непосредственное значение И регистр АХ (AL): |1010100w|--data--|data, если w=1|

Непосредственное значение И регистр или память: y1111011w|mod000r/m|--data--|data, если w=1|

WAIT: Установка процессора в состояние ожидания

-------------------------------------------------

состоянии

О п е р а ц и я:

Позволяет

процессору оставаться в

ожидания, пока не

произойдет

внешнее прерывание. Данная

операция

необходима для обеспечения синхронизации процессора с внешним устройством или с сопроцессором. Процессор ожидает, пока внешнее устройство (или сопроцессор) не закончит выполнение операции и на входной линии TEST не появится сигнал (активный уровень).

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: 10011011

XCHG: Перестановка

--------------------

О п е р а ц и я: Переставляет два байта или два слова между двумя регистрами (например, XCHG AH,BL) или между регистром и памятью (например, XCHG CX,word).

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д (два формата):

Регистр и аккумулятор: |10010reg|

Регистр/память и регистр: |1000011w|modregr/m|

XLAT: Перекодировка

---------------------

О п е р а ц и я: Транслирует байты в другой формат, например при переводе нижнего регистра в верхний или при перекодировке ASCII-кода в EBCDIC-код. Для выполнения данной команды необходимо определить таблицу преобразования байт и загрузить ее адрес в регистр ВХ. Регистр AL должен содержать байт, который будет преобразован с помощью команды XLAT. Операция использует значение в регистре AL как смещение в таблице, выбирает байт по этому смещению и помещает его в регистр AL.

Ф л а г и: Не меняются.

О б ъ е к т н ы й к о д: 11010111 (без операндов).

XOR: Исключающее ИЛИ

----------------------

Оп е р а ц и я: Выполняет логическую операцию исключающего ИЛИ над битами двух операндов. Операндами являются байты или слова в регистрах или

впамяти, второй операнд может иметь непосредственное значение. Команда XOR обрабатывает операнды побитово. Если проверяемые биты одинаковы, то команда XOR устанавливает бит в операнде 1 равным нулю, если биты различны, то бит в операнде 1 устанавливается равным единице. См. также команды AND и OR.

Фл а г и: Команда воздействует на флаги CF, OF, PF, SF и ZF (флаг AF неопределен).

Об ъ е к т н ы й к о д (три формата):

Регистр/память с регистром: |001100dw|modregr/m|

Непосредственное с регистром AX (AL): |0011010w|--data--|data если w=1|

Непосредственное с регистром/памятью: |1000000w|mod110r/m|--data--|data если w=1|

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]