- •80286 И 80386 выходят за рамки данной книги и поэтому в данной главе также
- •Xor и test.
- •Idiv: Целое деление знаковых величин
- •Imul: Целое умножение знаковых величин
- •In: Ввод байта или слова из порта
- •Inc: Инкремент
- •Int: Прерывание
- •Into: Прерывание по переполнению
- •Iret: Возврат из обработки прерывания
- •2. См. Также команду ret.
- •Ip значение операнда (относительное смещение) и выполняет таким образом
- •Ino: Переход, если нет переполнения
- •Ip значение операнда (относительное смещение) и выполняет таким образом
- •80186, 80286 И 80386 имеют, кроме того, команду outs (Output String -
- •1; Ротация более чем на один бит требует указания регистра cl, который
- •Xchg: Перестановка
- •Xchg cx,word).
- •Xlat: Перекодировка
- •Xor: Исключающее или
- •Xor обрабатывает операнды побитово. Если проверяемые биты одинаковы, то
- •42936 / 16 2683 8 8 (Младшая цифра)
- •10 / 16 0 10 A (старшая цифра)
80186, 80286 И 80386 имеют, кроме того, команду outs (Output String -
вывод строки). См. также команду IN.
Ф л а г и: Не меняются.
О б ъ е к т н ы й к о д (два формата):
Переменный порт: |1110111w|
Фиксированный порт:|1110011w|--port--|
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: Циклический сдвиг влево и циклический сдвиг вправо
---------------------------------------------------------------
О п е р а ц и я: Выполняет циклический сдвиг битов (ротацию) влево
или вправо. Данные операции могут выполняться в байте или в слове, в
регистре или в памяти. Ротация на один бит кодируется в команде значением
