восьми битах получено четное число битов. Если флаг PF равен единице
(четный паритет), то команда прибавляет к регистру IP значение операнда
(относительное смещение) и выполняет таким образом переход. См. также
команду JNP/JPO.
Ф л а г и: Не меняются.
О б ъ е к т н ы й к о д: |01111010|--disp--|
JS: Переход по знаку
----------------------
О п е р а ц и я: Передает управления по определенному адресу, если в
результате операции получен отрицательный знак. Если флаг SF равен единице
(отрицательно), то команда JS прибавляет к регистру IP значение операнда
(относительное смещение) и выполняет таким образом переход. См. также
команду JNS.
Ф л а г и: Не меняются.
О б ъ е к т н ы й к о д: |01111000|--disp--|
LAHF: Загрузка флагов в регистр АН
------------------------------------
О п е р а ц и я: Загружает значение флагового регистра в регистр АН.
Данная команда обеспечивает совместимость с процессором 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|
Фиксированный порт:|1110011w|--port--|
POP: Извлечение слова из стека
--------------------------------
О п е р а ц и я: Передает слово (помещенное ранее в стек) в указанный
операнд. Регистр SP указывает на текущее слово в вершине стека. Команда
POP извлекает слово из стека и увеличивает значение в регистре SP на 2.
Существует три типа команды POP в зависимости от операнда: общий регистр,