80386 процессор

вместо прибавления 6.

DEC Декремент на 1.

Команда вычитает 1 из операнда приемника. Состояние флага CF не изменяется.

DIV Деление целых чисел без знака.

Команда выполняет деление числа без знака в аккумуляторе на операнд-источник. Размер делимого в битах в два раза больше размера делителя. Если делитель равен 0, или если частное не помещается в назначенный регистр, возбуждается прерывание 0.

ENTER Создание кадра стека для параметров процедуры Команда создает кадр стека, который можно использовать

для реализации правил языков высокого уровня с блочной струк­турой. Команда LEAVE в конце процедуры выполняет обратные действия.

Команда имеет два параметра. Первый определяет число бай­тов динамической памяти, выделяемых в стеке для вызванной программы. Второй параметр соответствует лексическому уровню вложенности программы (от 0 до 31). Этот уровень определяет, сколько наборов указателей кадра стека копируются центральным процессором в новый кадр стека из текущего кадра.

ESC Расширение процессора

Арифметический сопроцессор предоставляет расширение

системы команд МП 80386. Сопроцессор поддерживает высокоточные

вычисления как целочисленные, так и с плавающей точкой и, кро­ме того, содержит набор полезных констант, ускоряющих вычисле­ния. Сопроцессор работает параллельно с центральным процессо­ром, обеспечивая таким образом высокую производительность.

Команды сопроцессора включаются в общий поток команд, составляющих программу для МП 80386. Система выполняет команды сопроцессора в том порядке, в котором они появляются в потоке.

HLT Останов

Команда прекращает выполнение любых команд и переводит МП в состояние останова. Немаскируемые прерывания, операция за­пуска и разрешенные прерывания возобновляют работу процессора. Команда HLT обычно является последней командой в последова­тельности команд останова системы, например для сохранения состояния процесса после обнаружения сбоя питания.

IDIV Знаковое деление

Команда выполняет знаковое деление. Делимому, частному и остатку неявно назначаются определенные регистры, в то время как местонахождение делителя указывается явным образом. По форме делителя определяется, какие регистры должны использо­ваться. Если делитель равен нулю или частное слишком велико для регистра-приемника, возбуждается прерывание 0.

IMUL Знаковое целочисленное умножение

Команда выполняет операцию знакового целочисленного умно­жения. Команда имеет три варианта.

1. Однооперандная форма. Операнд может быть байтом, сло­вом или двойным словом в памяти или регистре общего назначе­ния. Команда использует содержимое регистров EAX и EDX в ка­честве операндов.

2. Двухоперандная форма. Один из операндов-источников мо­жет находиться в любом регистре общего назначения, в то время как другой может быть в регистре общего назначения или в памя­ти. Произведение размещается на месте операнда в регистре об­щего назначения.

3. Трехоперандная форма. Два операнда представляют собой источники и один приемник. Один из операндов-источников явля­ется непосредственным значением, записанным в команде. Второй может находиться в памяти или в любом регистре общего назначе­ния. Произведение может быть записано в любой регистр общего назначения. Непосредственный операнд считается знаковым. Если он является байтом, процессор перед выполнением умножения ав­томатически расширяет его знак до размера второго операнда.

IN Ввод из порта

Команда вводит байт или слово из порта и записывает его в регистре (AL, AH, EAX). Порт указывается вторым операндом. Для доступа к порту его номер следует поместить в регистр DX и использовать команду IN с обозначением DX в качестве второго параметра.

INC Инкремент на 1.

Команда прибавляет 1 к операнду-приемнику, но в отличие от ADD не влияет на флаг CF.

INT Вызов процедуры обработки прерывания

Команда передает управление от одной ячейки программного сегмента на другую. Эти ячейки могут принадлежать одному прог­раммному сегменту или разным программным сегментам. Команда возбуждает программное прерывание, позволяющее пользователю передть управление из своей программы программе обработки пре­рываний.

Команда INTn активизирует программу обработки прерывания, соответствующую номеру, указанному в команде. Команда может определять прерывание любого типа. Заметьте, что прерывания

0..31 зарезервированы фирмой Intel. Возврат управления из программы обработки прерывания осуществляется командой IRET.

INTO Прерывание по переполнению

Команда при установленном флаге OF возбуждает прерывание 4, которое специально зарезервировано для этой цели. Флаг OF устанавливается рядом арифметических, логических и строковых команд.

IRET Возврат из прерывания

Команда возвращает управление прерванной процедуре. В от­личие от команды RET IRET извлекает из стека значения флагов и помещает их в регистр флагов. Флаги записываются в стек в про­цессе реализации прерывания.

IRETD Возврат из прерывания в 32-разрядном режиме

JMP Переход

Команда передает управление из одной точки сегмента в другую. Точка перехода может быть в том же сегменте (ближний переход) или в другом сегменте (дальний переход). Команда бе­зусловно передает управление в точку перехода и является, та­ким образом, однонаправленной.

Команды условных переходов:

JA/JNBE Выше, не ниже и не равно

JAE/JNB Выше или равно, не ниже

JB/JNAE Ниже, не выше и не равно

JBE/JNA Ниже или равно, не выше

JC Перенос

JE/JZ Равно, нуль

JNC Отсутствие переноса

JNE/JNZ Не равно, не нуль

JNP/JPO Отсутствие четности, нечетность

JP/JPE Четность

JG/JNLE Больше, не меньше и не равно

JGE/JNL Больше или равно, не меньше

JL/JNGE Меньше, не больше и не равно

JLE/JNG Меньше или равно, не больше

JNO Отсутствие переполнения

JNS Отсутствие знака

(положительно, включая нуль)

JO Переполнение

JS Знак (отрицательно)

LAHF Загрузка флагов в регистр AH

Хотя для изменения флагов CF и DF предусмотрены специаль­ные команды, остальные флаги, используемые в прикладных прог­раммах, нельзя изменять непосредственно. Эта команда дает воз­можность программного изменения остальных битов флагов с по­мощью команд побитовых операций после пересылки флагов в стек или в регистр AH.

Команда копирует биты SF,ZF,AF,PF,CF соответственно в разряды 7,6,4,2,0 регистра AH.

LAR Загрузка байта прав доступа

Команда читает дескриптор сегмента и заносит биты дроб­ности(23), свободный (20), присутствия (15), DPL (14), типа (9-11) и доступа (8) в 32-разрядный регистр, бит дробности и свободный бит не пересылаются.

LEA Загрузка исполнительного адреса

Команда пересылает по адресу приемника относительный ад­рес операнда-источника. Операнд-источник должен находиться в памяти. Операнд-приемник должен быть регистром общего назначе­ния. Команда особенно полезна для инициализации регистров пе­ред выполнением действий над начальными данными или команды XLAT.

LEAVE Выход из процедуры высокого уровня

Команда выполняет действия противоположные действию ко­манды ENTER.

LGDT Загрузка регистра таблицы глобальных дескрипторов

LIDT Загрузка регистра таблицы

Команда оповещает аппратные средства о точке перехода в случае прерываний.

LGS Загрузка полного указателя

LSS Загрузка указателя с использованием регистра SS

LDS Загрузка указателя с использованием регистра DS

LES Загрузка указателя с использованием регистра ES

LFS Загрузка указателя с использованием регистра FS

Команды указателей данных загружают указатель, состоящий из селектора сегмента и относительного адреса, в регистр сег­мента и регистр общего назначения.

LLDT Загрузка регистра локальных дескрипторов

Таблица локальных дескрипторов загружается, когда задача или главная подсистема получает или восстанавливает контроль над системой.

LWSW Загрузка слова состояния машины

Команда загружает в регистр CR0 слово сотояния машины. Команду можно использовать для переключения в защищенный ре­жим.

LOCK Префикс установки сигнала LOCK#

Сигнал LOCK# захватывает общую память, так что МП получа­ет ее в свое исключительное пользование на время выполнения следующей за LOCK команды.

LODS Загрузка строкового операнда

LODSB Загрузка байта

LODSW Загрузка слова

LODSD Загрузка двойного слова

Эти команды обрабатывают не логические или арифметические переменные, а строки. Они воздействуют на один элемент строки, который может быть байтом, словом или двойным словом.

LOOP Циклическое выполнение, пока счетчик ECX не нуль

LOOPE Цикл, пока равно

LOOPZ Цикл, пока нуль

LOOPNE Цикл, пока не равно

LOOPNZ Цикл, пока не нуль

Команды обеспечивают условный переход для циклического выполнения участка программы. Число шагов определяется значе­нием, занесенным в регистр ECX. Все разновидности команды ав­томатически выполняют декремент ECX и останавливают цикл, если ECX=0.

LTR Загрузка регистра задачи

Первый операнд команды LTR определяет регистр-источник или ячейку памяти, содержащие информацию для регистра задачи. Команда загружает эту информацию в регистр задачи.

MOV Пересылка в/из специальных регистров

Команда используется для загрузки и выгрузки специальных регистров и регистров общего назначения.

MOVS Пересылка данных из строки в строку

MOVSB Пересылка байта строки

MOVSW Пересылка слова строки

MOVSD Пересылка двойного слова строки

Эти команды используются для работы со строками, а не ло­гическими или арифметическими величинами.

MOVZX Пересылка с расширением нуля

Команда расширяет 8-разрядную величину до 16-разрядной и 8- или 16-разрядную величину до 32-разрядной заполнением стар­ших разрядов нулями.

MUL Целочисленное беззнаковое умножение содержимого ре­гистров AL или AX

Команда перемножает операнд-источник и содержимое аккуму­лятора и возвращает результат удвоенной длины.

NEG Изменение знака, дополнение до 2

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

NOP Холостая команда

Команда занимает в памяти только 1 байт. Она действует только на указатель команд EIP. Команда NOP полезна при "вы­равнивании" адресов переходов.

OR Логическое ВКЛЮЧАЮЩЕЕ ИЛИ

Команда сравнивает два операнда и вычисляет следующее: если соответствующие биты в операндах равны 0, результат 0; в противном случае результат 1.

OUT Вывод в порт

Команда пересылает данные из регистра в порт вывода. Опе­ранд-источник находится в регистре AL,AX,EAX. Номер порта оп­ределяется первым операндом. Для вывода данных в любой порт от 0 до 65535 номер порта помещается в регистр DX.

OUTS Вывод строки в порт

OUTSB Вывод байта

OUTSW Вывод слова

OUTSD Вывод двойного слова

Разновидности команды OTS действуют аналогично команде OUT, но выводит в порт строку и после вывода данного содержи­мое регистра-источника получает приращение.

POP Извлечение слова из стека

Команда пересылает слово или двойное слово из текущей вершины стека (регистр ESP) по адресу приемника. Затем регистр ESP инкрементируется.

POPA Извлечение из стека содержимого всех регистров

POPAD Извлечение из стека содержимого всех регистров - 32-разрядный режим

POPF Восстановление из стека регистра FLAGS или EFLAGS

POPFD Восстановление из стека - 32-разрядный режим

PUSH Занести операнд в стек

Команда выполняет декремент указателя стека (ESP), затем заносит операнд-источник на вершину стека, куда указывает ESP.

PUSHA Занести в стек содержимое всех регистров общего назначения

Команда сохраняет в стеке содержимое восьми регистров об­щего назначения.

PUSHF Занесение в стек содержимого регистра флагов

RCL Циклический сдвиг влево через бит переноса с исполь­зованием бита CF для расширения

RCR Циклический сдвиг вправо через бит переноса с исполь­зованием бита CF для расширения

ROL Циклический сдвиг влево с циклическим возвратом битов

ROR Циклический сдвиг вправо с циклическим возвратом битов Команды циклического сдвига дают возможность циклически

сдвигать биты в байтах, словах и двойных словах.

REP Повторение последующей строковой операции

REPE Повторение, пока равно

REPZ Повторение, пока нуль

REPNE Повторение, пока не равно

REPNZ Повторение, пока не нуль

Префикс REP задает повторение строковой операции, что позволяет МП обрабатывать строки значительно быстрее, чем с помощью обычнного программного цикла.

RET Возврат из процедуры

Команда завершает выполнение вызванной процедуры и пере­дает управление посредством обратной ссылки, хранящейся в сте­ке. Обратная ссылка указывает на программу, первоначально выз­вавшую процедуру.

SAHF Запись содержимого регистра AH в регистр флагов

SAL/SAR/SHL/SHR Команда сдвига

Биты в байтах, словах и двойных словах могут сдвигаться логически или арифметически. Сдвиг осуществляется на заданное число разрядов вплоть до 31.

SBB Целочисленное вычитание с займом

Команда вычитает операнд-источник из операнда-приемника. Если флаг CF установлен, вычитается еще 1.

SCAS/SCASB/SCASW/SCASD Сравнение строковых данных

Эти команды используются для работы со строками. Они воз­действуют на один элемент строки. Адресация элементов строки осуществляется через регистры ESI и EDI. После каждой строко­вой операции эти регистры автоматически уменьшаются или увели­чиваются на 1 в зависимости от регистра DF.

SETcc Установка байта по условию

Команда записывает в байт 0 или 1 в зависимости от любого из 16 условий, определяемых флагами состояния. Байт может быть в памяти или в однобайтовом регистре общего назначения. Если условие cc истинно, команда записывает в байт 1; в противопо­ложном случае - 0.

SGDT Запись в память содержимого регистра таблицы гло­бальных дескрипторов

SIDT Запись в память содержимого регистра таблицы деск­рипторов прерываний

Эти команды копируют содержимое регистра в поле из 6 байт на которое указывает операнд.

SHLD Сдвиг влево с двойной точностью

SHRD Сдвиг вправо с двойной точностью

Команды предоставляют возможность реализации операций на данных невыровненных строках битов.

SLDT Запись содержимого регистра таблицы локальных деск­рипторов

Команда записывает содержимое LDTR в регистр или ячейку памяти с исполнительным адресом, указанным в операнде команды.

SMSW Запись слова состояния машины

Слово состояния машины является частью регистра управле­ния CR0. Команда записывает это слово в двухбайтовый регистр или ячейку памяти. Команда оставлена для совместимости с МП

80286. В МП 80386 следует использовать команду MOV ... CR0.

STC Установка флага переноса CF

STD Установка флага направления DF

STI Установка флага прерываний IF

STOS/STOSB/STOSW/STOSD Запись строки данных

Запись строки данных. Адресация через регистры ESI и EDI.

STR Запись регистра задачи

Команда копирует содержимое регистра задачи в двухбайтный регистр или ячейку памяти.

SUB Вычитание целых чисел

Команда вычитает операнд-источник из операнда-приемника и помещает результат на место операнда-приемника.

TEST Логическое сравнение

Команда выполняет логическую операцию И над двумя операн­дами. Затем команда сбрасывает флаги OF и CF, оставляет AF не­определенным и модифицирует SF,ZF,PF. Команда отличается от команды AND тем, что она не модифицирует операнд-приемник.

VERR Проверка сегмента на чтение

VERW Проверка сегмента на запись

Эти команды проверяют, доступен ли выбранный селектором сегмент при текущем уровне привилегий и разрешены ли в нем чтение или запись. Если сегмент доступен, флаг ZF устанавлива­ется в 1.

WAIT Ожидание пассивного состояния вывода BUSY#

Команда приостанавливает выполнение программы МП 80386 до тех пор пока ЦП 80386 не обнаружит пассивное состояние вывода BUSY. Это указывает на то, что сопроцессор завершил выполнение задачи и что ЦП может получить результат.

XCHG Обмен между регистрами или между памятью и регистром Команда заменяет три команды MOV. Она не нуждается во

вспомогательной ячейке для обмена операндами.

XLAT Табличное перекодирование

Команду удобно использовать при преобразовании из одной системы кодов в другую. Длина таблицы перекодирования от 1 до 256 байт.

XOR Логическое ИСКЛЮЧАЮЩЕЕ ИЛИ

Похожие рефераты: