Микропроцессор - 8086 Наборы инструкций
Микропроцессор 8086 поддерживает 8 типов инструкций -
- Инструкции по передаче данных
- Арифметические инструкции
- Инструкции по обработке битов
- Строковые инструкции
- Инструкции по передаче выполнения программы (инструкции ветвления и цикла)
- Инструкции по управлению процессором
- Инструкции по итерационному контролю
- Инструкции по прерыванию
Давайте теперь обсудим эти наборы инструкций подробно.
Инструкции по передаче данных
Эти инструкции используются для передачи данных из исходного операнда в целевой операнд. Ниже приведен список инструкций для этой группы -
Инструкция по переносу слова
MOV - Используется для копирования байта или слова из предоставленного источника в указанное место назначения.
PPUSH - Используется для размещения слова в верхней части стопки.
POP - Используется для передачи слова из вершины стопки в указанное место.
PUSHA - Используется для помещения всех регистров в стек.
POPA - Используется для получения слов из стека во все регистры.
XCHG - Используется для обмена данными из двух мест.
XLAT - Используется для перевода байта в AL с использованием таблицы в памяти.
Инструкции по переносу порта ввода и вывода
IN - Используется для чтения байта или слова из предоставленного порта в аккумулятор.
OUT - Используется для отправки байта или слова из аккумулятора в указанный порт.
Инструкция по переносу адреса
LEA - Используется для загрузки адреса операнда в указанный регистр.
LDS - Используется для загрузки регистра DS и другого предоставленного регистра из памяти
LES - Используется для загрузки регистра ES и других предоставленных регистров из памяти.
Инструкции по переносу регистров флагов
LAHF - Используется для загрузки в AH младшего байта регистра флага.
SAHF - Используется для хранения регистра AH в младшем байте регистра флага.
PUSHF - Используется для копирования регистра флага наверху стека.
POPF - Используется для копирования слова из верхней части стека в регистр флага.
Арифметические инструкции
Эти инструкции используются для выполнения арифметических операций, таких как сложение, вычитание, умножение, деление и т. Д.
Ниже приведен список инструкций для этой группы -
Инструкции по выполнению сложения
ADD - Используется для добавления предоставленного байта к байту / слово к слову.
ADC - Используется для добавления с переносом.
INC - Используется для увеличения предоставленного байта / слова на 1.
AAA - Используется для настройки ASCII после добавления.
DAA - Используется для настройки десятичной дроби после операции сложения / вычитания.
Инструкции по выполнению вычитания
SUB - Используется для вычитания байта из байта / слова из слова.
SBB - Используется для вычитания с заимствованием.
DEC - Используется для уменьшения предоставленного байта / слова на 1.
NPG - Используется для инвертирования каждого бита предоставленного байта / слова и добавления дополнения 1/2.
CMP - Используется для сравнения 2 предоставленных байта / слова.
AAS - Используется для корректировки кодов ASCII после вычитания.
DAS - Используется для настройки десятичной дроби после вычитания.
Инструкция по выполнению умножения
MUL - Используется для умножения байта без знака на байт / слово на слово.
IMUL - Используется для умножения подписанного байта на байт / слово за словом.
AAM - Используется для корректировки кодов ASCII после умножения.
Инструкция по выполнению деления
DIV - Используется для разделения беззнакового слова на байты или беззнакового двойного слова на слово.
IDIV - Используется для разделения слова со знаком на байты или двойного слова со знаком на слово.
AAD - Используется для настройки кодов ASCII после деления.
CBW - Используется для заполнения старшего байта слова копиями знакового бита младшего байта.
CWD - Используется для заполнения верхнего слова двойного слова знаковым битом нижнего слова.
Инструкции по обработке битов
Эти инструкции используются для выполнения операций, в которых задействованы биты данных, то есть таких операций, как логические операции, сдвиг и т. Д.
Ниже приведен список инструкций для этой группы -
Инструкции по выполнению логической операции
NOT - Используется для инвертирования каждого бита байта или слова.
AND - Используется для добавления каждого бита в байте / слове с соответствующим битом в другом байте / слове.
OR - Используется для умножения каждого бита в байте / слове на соответствующий бит в другом байте / слове.
XOR - Используется для выполнения операции исключающего ИЛИ над каждым битом в байте / слове с соответствующим битом в другом байте / слове.
TEST - Используется для добавления операндов к флагам обновления, не затрагивая операнды.
Инструкции по выполнению сменных операций
SHL/SAL - Используется для сдвига битов байта / слова влево и установки нуля (S) в младшие биты.
SHR - Используется для сдвига битов байта / слова вправо и установки нуля (S) в MSB.
SAR - Используется для сдвига битов байта / слова вправо и копирования старого MSB в новый MSB.
Инструкции по выполнению операций поворота
ROL - Используется для поворота битов байта / слова влево, т. Е. Из MSB в LSB и во флаг переноса [CF].
ROR - Используется для поворота битов байта / слова вправо, то есть из LSB в MSB и во флаг переноса [CF].
RCR - Используется для поворота битов байта / слова вправо, т.е. LSB в CF и CF в MSB.
RCL - Используется для поворота битов байта / слова влево, т.е. MSB в CF и CF в LSB.
Строковые инструкции
Строка - это группа байтов / слов, и их память всегда выделяется в последовательном порядке.
Ниже приведен список инструкций для этой группы -
REP - Используется для повторения данной инструкции до CX ≠ 0.
REPE/REPZ - Используется для повторения данной инструкции до тех пор, пока CX = 0 или нулевой флаг ZF = 1.
REPNE/REPNZ - Используется для повторения данной инструкции до тех пор, пока CX = 0 или нулевой флаг ZF = 1.
MOVS/MOVSB/MOVSW - Используется для перемещения байта / слова из одной строки в другую.
COMS/COMPSB/COMPSW - Используется для сравнения двух строковых байтов / слов.
INS/INSB/INSW - Используется как входная строка / байт / слово из порта ввода-вывода в предоставленную ячейку памяти.
OUTS/OUTSB/OUTSW - Используется как строка / байт / слово вывода из предоставленной ячейки памяти в порт ввода / вывода.
SCAS/SCASB/SCASW - Используется для сканирования строки и сравнения ее байта с байтом в AL или строкового слова со словом в AX.
LODS/LODSB/LODSW - Используется для сохранения строкового байта в AL или строкового слова в AX.
Инструкции передачи выполнения программы (инструкции ветвления и цикла)
Эти инструкции используются для передачи / разветвления инструкций во время выполнения. Он включает следующие инструкции -
Инструкции по передаче инструкции во время выполнения без каких-либо условий -
CALL - Используется для вызова процедуры и сохранения адреса возврата в стек.
RET - Используется для возврата из процедуры в основную программу.
JMP - Используется для перехода к предоставленному адресу для перехода к следующей инструкции.
Инструкции по передаче инструкции во время выполнения с некоторыми условиями -
JA/JNBE - Используется для прыжка, если выполняется инструкция выше / не ниже / равно.
JAE/JNB - Используется для прыжка, если инструкция выше / не ниже удовлетворяет.
JBE/JNA - Используется для прыжка, если выполняется инструкция ниже / равно / не выше.
JC - Используется для перехода, если флаг переноса CF = 1
JE/JZ - Используется для перехода, если флаг равен / нулю ZF = 1
JG/JNLE - Используется для перехода, если удовлетворяет инструкция больше / не меньше / равно.
JGE/JNL - Используется для перехода, если больше / равно / не меньше, чем удовлетворяет инструкция.
JL/JNGE - Используется для перехода, если удовлетворяет инструкция меньше / не больше / равно.
JLE/JNG - Используется для перехода, если меньше / равно / если не больше, чем удовлетворяет инструкция.
JNC - Используется для перехода, если нет флага переноса (CF = 0)
JNE/JNZ - Используется для перехода, если не равен / нулевой флаг ZF = 0
JNO - Используется для перехода, если нет флага переполнения OF = 0
JNP/JPO - Используется для перехода, если не четность / четность нечетная PF = 0
JNS - Используется для прыжка, если нет знака SF = 0
JO - Используется для перехода, если флаг переполнения OF = 1
JP/JPE - Используется для перехода, если четность / четность даже PF = 1
JS - Используется для прыжка, если признак знака SF = 1
Инструкции по управлению процессором
Эти инструкции используются для управления работой процессора путем установки / сброса значений флагов.
Ниже приведены инструкции для этой группы -
STC - Используется для установки флага переноса CF в 1
CLC - Используется для очистки / сброса флага переноса CF на 0
CMC - Используется для установки дополнения в состояние флага переноса CF.
STD - Используется для установки флага направления DF на 1
CLD - Используется для сброса / сброса флага направления DF на 0
STI - Используется для установки флага разрешения прерывания на 1, т. Е. Для включения входа INTR.
CLI - Используется для сброса флага разрешения прерывания на 0, то есть для отключения входа INTR.
Инструкции по итерационному контролю
Эти инструкции используются для выполнения заданных инструкций несколько раз. Ниже приведен список инструкций для этой группы -
LOOP - Используется для цикла группы инструкций, пока не будет выполнено условие, т. Е. CX = 0
LOOPE/LOOPZ - Используется для цикла группы инструкций до тех пор, пока она не удовлетворит ZF = 1 & CX = 0
LOOPNE/LOOPNZ - Используется для цикла группы инструкций до тех пор, пока она не удовлетворит ZF = 0 и CX = 0
JCXZ - Используется для перехода к указанному адресу, если CX = 0
Инструкции по прерыванию
Эти инструкции используются для вызова прерывания во время выполнения программы.
INT - Используется для прерывания программы во время выполнения и вызова указанной службы.
INTO - Используется для прерывания программы во время выполнения, если OF = 1
IRET - Используется для возврата из службы прерывания в основную программу