- •Введение
- •Программная модель микропроцессора Intel8086
- •Структура и формат команд
- •Примеры некоторых форматов команд
- •Базовый - индексный способ адресации
- •Относительный базовый – индексный способ адресации
- •Система команд мп Intel8086 Команды перемещения данных
- •Загрузка в стек (с декрементом sp )
- •Команда безусловного перехода
- •Вызов подпрограммы
- •Возврат из подпрограммы ret
- •Команды организации циклов
- •Команды прерывания
- •Команды строчной обработки
- •Команды манипуляции со флажками
- •Команды управления микропроцессором
Загрузка в стек (с декрементом sp )
- Ячейки памяти или регистра
PUSH src |
11111111 |
mod 110 r/m |
- Регистра
PUSH reg |
01011 reg |
- Сегментного регистра
PUSH sreg |
000 reg 110 |
reg – короткий номер сегм. Регистра |
Извлечение из стека (с инкрементом SP)
- В память или регистр
POP dst |
10001111 |
mod 000 r/m |
- В регистр
POP reg |
01011 reg |
- В сегментный регистр
POP sreg |
000 reg 111 |
reg – короткий номер сегм. Регистра |
Перестановка (источник и приемник обмениваются содержимым)
- Между памятью или регистром и регистром
XCHG dst, reg |
1000011 w |
mod reg r/m |
- Между регистром и аккумулятором
XCHG AX, RX |
10010 reg |
Преобразование из кода в код
- Загрузка из памяти по адресу (BX)+(AL) в регистрAL
XLAT |
11010111 |
Удобно использовать для табличного преобразования кодов.
Загрузка регистра флагов в стек.
PUSHF |
10011100 |
Пересылка слова из стека в регистр флагов
POPF |
10011101 |
Загрузка регистра AH в младший байт регистра флагов
SAHF |
10011110 |
Загрузка эффективного адреса операнда в регистр
LEA reg, src |
10001101 |
mod reg r/m |
Загрузка двойного слова, определяемого операндомsrc в гегистрыDS иreg
LES reg, src |
11000101 |
mod reg r/m |
Загрузка DS иPOH физическим адресом
LES reg, src |
11000100 |
mod reg r/m |
Загрузка младшего байта регистра флагов в AH
LAHF |
10011111 |
Ввод из порта в AL илиAX
- Ввод из непосредственно адресуемого порта (не более 255 десятичн.)
IN A*, PORT |
1110010 w |
адр. порта |
- Ввод из порта, адресуемого через DX
IN A*, DX |
1110010 w |
Вывод из аккумулятора
- Вывод в непосредственно адресуемый порт
OUT PIRT, A* |
1110011 w |
адр. порта |
- Вывод в порт, адресуемый через DX
OUT DX, A* |
1110111 w |
Арифметические операции
Сложение ADD dst, src (dst = dst + src)
- Содержимого регистра или памяти с содержимым регистра
ADD dst, src |
000100 d w |
mod reg r/m |
- Непосредственных данных с содержимым регистра или панели
ADD dst, data |
100000 s w |
mod 000 r/m |
данные |
Данные (w = 1) |
- Непосредственные данные с АХ
ADD A*, data |
0000010 w |
данные |
данные (w = 1) |
Сложение с учетом переноса
- Регистра или памяти с регистром
ADS dst, src |
000100 d w |
mod reg r/m |
- Непосредственных данных с содержимым регистра или памяти
ADC dst, data |
100000 s w |
mod reg r/m |
данные |
Данные (w = 1) |
- Непосредственных данных с аккумулятором
ADC A*, data |
0001010 w |
Данные |
данные (w = 1) |
Инкремент
- Регистра или памяти
INC dst |
1111111 w |
mod 000 r/m |
- Регистра
INC reg |
01000 reg |
Коррекция аккумулятора AL при сложении распакованных двоично-десятичных чисел (в кодеASCII)
AAA |
001100111 |
Коррекция аккумулятора AL при сложении упакованных двоично-десятичных чисел
DAA |
00100111 |
Вычитание SUB dst, src (dst = dst - src)
- Регистра или памяти из регистра
SUB dst, src |
001010 d w |
mod reg r/m |
- Непосредственных данных из регистра или памяти
SUB dst, data |
100000 s w |
mod reg r/m |
данные |
данные (w = 1) |
- Непосредственных данных из аккумулятора
SUB A*, data |
0010110 w |
данные |
данные (w = 1) |
Вычитание с учетом заема
- Регистра или памяти из регистра
SBB dst, src |
000110 d w |
mod reg r/m |
- Непосредственных данных из регистра или памяти
SBB dst, data |
100000 s w |
mod reg r/m |
данные |
данные (w = 1) |
- Непосредственных данных из аккумулятора
SBB A*, data |
0001110 w |
Данные |
данные (w = 1) |
Декремент
- Регистра или памяти
DEC dst |
1111111 w |
mod 001 r/m |
- Регистра
DEC reg |
01001 reg |
Изменение знака
NEG dst |
1111011 w |
mod 011 r/m |
Сравнение CMP dst, src ( dst – src )
- Регистра или памяти и регистра
CMP dst, data |
100000 s w |
mod 111 r/m |
данные |
данные (w = 1) |
- Непосредственных данных с регистром или памяти
CMP A*, data |
0011110 w |
Данные |
данные (w = 1) |
- Непосредственных данных с аккумулятором
AAS |
00101111 |
Десятичная коррекция распакованных чисел для вычитания
DAS |
00101111 |
Умножение без знака AL илиAX на операндsrc
MUL src |
1111011 w |
mod 100 r/m |
Умножение с учетом знака AL илиAX на операндsrc ( умножение целых чисел)
IMUL src |
1111011 w |
mod 101 r/m |
Десятичная коррекция AX при умножении распакованных чисел (кодASCII)
AAM src |
11010100 |
00001010 |
Беззнаковое деление содержимого DX, AX на операндsrc
DIV src |
1111011 w |
mod 110 r/m |
Деление содержимого DX, AX наsrc с учетом знака (деление целых чисел )
IDIV src |
1111011 m |
mod 111 r/m |
Десятичная коррекция AL при делении распакованных чисел (кодASCII)
AAD src |
11010101 |
00001010 |
Преобразование байта в слово
CBW |
10011001 |
Преобразование слова в двойное слово
CWD |
10011001 |
Логические операции
Инвертирование
NOT dst |
1111011 w |
mod 010 r/m |
Логическое «И» ( dst = (dst) and (src) )
- Регистра или памяти и регистра
AND dst, src |
001000 d w |
mod reg r/m |
- Непосредственных данных и регистра или памяти
AND dst, data |
1000000 w |
mod 100 r/m |
данные |
данные (w = 1) |
- Непосредственных данных и аккумулятора
AND A*, data |
0010010 w |
Данные |
данные (w = 1) |
Логическое сравнение (установление регистра флагов)
- Регистра или памяти и регистра
TEST dst, src |
1000010 w |
mod reg r/m |
- Непосредственных данных и регистра или памяти
TEST dst, data |
1111011 w |
mod 000 r/m |
данные |
данные (w = 1) |
- Непосредственных данных и аккумулятора
Логическое «ИЛИ»
- Регистром или памятью и регистром
TEST A*, data |
1010100 w |
данные |
данные (w = 1) |
- Непосредственными данными и регистром или памятью
OR dst, src |
000010 d w |
mod reg r/m |
- Непосредственными данными и аккумулятором
OR dst, data |
1000000 w |
mod 001 r/m |
данные |
данные (w = 1) |
Команды сдвигов
Логический арифметический сдвиг dst наcnt разрядов влево
XOR dst, src |
001100 d w |
mod reg r/m |
Логический сдвиг вправо
XOR dst, data |
1000000 w |
mod 110 r/m |
данные |
данные (w = 1) |
Циклический сдвиг влево
XOR A*, data |
0011010 w |
данные |
данные (w = 1) |
Циклический сдвиг вправо
SHL/SAL dst, cnt |
110100 v w |
mod 001 r/m |
Циклический сдвиг влево через перенос
SHR dst, cnt |
110100 v w |
mod 101 r/m |
Циклический сдвиг вправо через перенос
SAR dst, cnt |
110100 v w |
mod 111 r/m |
Команды передачи управления
Команда условного переноса
Все команды условного перехода занимают 2 байта и имеют следующий машинный формат:
КОП |
cмещение |
8-байтовое смещение записывается в дополнительном коде, занимает второй байт команды и обеспечивает переход в диапазоне от –128 до +127 внутри сегмента относительно текущего значения указателя команд ( (IP) = (IP) + смещение). Переход осуществляется, если проверяемое условие выполняется, иначе выполняется следующая команда. На языке ассемблера в команде условного перехода указывается метка или адрес перехода. Смещение вычисляется ассемблером при трансляции, смещение= адрес перехода –IP (IP – адрес команды, следующей за командой перехода).
Мнемоника |
КОП 16-рич. |
Условие Перехода |
Смысловое значение |
JE/JZ |
74 |
ZF = 1 |
Если нуль или равно |
JNE/JNZ |
75 |
ZF = 0 |
Если не нуль или не равно |
JS |
78 |
GE = 1 |
Если минус |
JNS |
79 |
SF = 0 |
Если плюс |
JO |
70 |
GF = 1 |
Если переполнение |
JNO |
71 |
GF = 0 |
Если нет переполнения |
JP/JFE |
7A |
PF = 1 |
Если четный паритет |
JNP/JFO |
7B |
PF = 0 |
Если нечетный паритет |
JB/JNAE/JC |
72 |
CF = 1 |
Если перенос (не более или равно) |
JNB/JAE/JNC |
73 |
CF = 0 |
Если нет переноса |
JBE/JNA |
76 |
(CF) OR (ZF) = 1 |
Если меньше или равно с учетом знака |
JNBE/JA |
77 |
(CF) OR (ZF) = 0 |
Если больше с учетом знака |
JL/JNGE |
7C |
(SF) XOR (OF) = 1 |
Если меньше |
JNL/JGE |
7D |
(SF) XOR (OF) = 0 |
Если не меньше |
JLE/JNG |
7E |
((SF) XOR (OF)) OR (ZF) = 1 |
Если меньше или равно |
JNLE/JG |
7F |
((SF) XOR (OF)) OR (ZF) = 0 |
Если больше |
|
11101000 |
Смещение мл. б. |
смещение ст. б. |
|
11101011 |
смещение |