
Jazik_Assemblera_dlja_IBM_PC_i_programmir
.pdfО п е р а ц и я: Загружает значение флагового регистра в регистр АН. Данная команда обеспечивает совместимость с процессором 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|