сегментный регистр, слово в памяти. См. также команду 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: Установка флага прерывания