Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Абель.docx
Скачиваний:
13
Добавлен:
26.11.2018
Размер:
569.84 Кб
Скачать

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: Циклический сдвиг влево и циклический сдвиг вправо

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

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

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

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