Описание процессора i8086 для программиста

Описание процессора i8086 для программиста

Общие сведения
Представление информации

Двоичные числа без знака
Двоичные числа со знаком
Символьная информация
Двоично-десятичные числа
Физическая память
Сегментация
Стек
Регистры микропроцессора


Регистры общего назначения

Сегментные регистры
Регистр флагов
Указатель инструкции
Выполнение инструкций
Адресация операндов
Регистровые операнды
Операнды в памяти
Непосредственные операнды

Адреса переходов
Формат кода команды
Префиксы
Код операции
Байт ModRegR/M
Отклонение
Непосредственный операнд

Инициализация процессора
Источники и причины прерываний
Внешние прерывания
Немаскируемые прерывания
Маскируемые прерывания
Исключения
Прерывание по ошибке деления
Прерывание по точке останова
Прерывание по переполнению
Прерывание по трассировке

Программные прерывания
Таблица векторов прерываний
Действия микропроцессора по обработке прерывания
Приоритет прерываний
Идентификация источников прерываний
Система команд
Машинные инструкции
AAA – коррекция сложения двоично-десятичных распакованных чисел
Замечания по программированию

AAD – коррекция деления двоично-десятичных распакованных чисел
AAM – коррекция умножения двоично-десятичных распакованных чисел
AAS – коррекция вычитания двоично-десятичных распакованных чисел
ADC – двоичное сложение с переносом
AND – логическое И

CALL – вызов процедуры
CBW – преобразование байта в слово
CLC – сброс флага переноса
CLD – сброс флага направления
CLI – сброс флага разрешения прерывания
CMC – инверсия флага переноса
CMP – сравнение
CMPS – сравнение строк
CWD – преобразование слово в двойное слово

DAA – коррекция сложения двоично-десятичных упакованных чисел
DAS – коррекция вычитания двоично-десятичных упакованных чисел
DEC – декремент
DIV – деление беззнаковое
ESC – команда сопроцессора
Замечания по программированию
HLT – останов процессора
IDIV – деление знаковое
IMUL – умножение знаковое

IN – ввод информации из порта ввода-вывода
INC – инкремент
INT – программное прерывание
INTO – прерывание по переполнению
Замечания по программированию
IRET – возврат из прерывания
Jcc – условные переходы

JMP – безусловный переход
LAHF – загрузка флагов состояния в регистр AH
LDS – загрузка дальнего указателя для сегмента данных
LEA – загрузка эффективного адреса
LES – загрузка дальнего указателя для дополнительного сегмента данных
LODS – загрузка строки
LOOP/LOOPcc – цикл по счётчику в регистре CX
MOV – пересылка

MOVS – пересылка строк
MUL – умножение беззнаковое
NEG – смена знака
NOP – нет операции
NOT – инверсия
OR – логическое ИЛИ
OUT – вывод информации из порта ввода-вывода
POP – извлечение информации из стека

POPF – загрузка регистра флагов из стека
PUSH – занесение информации в стек
PUSHF – запись регистра флагов в стек
RCL – циклический сдвиг влево через флажок переноса
RCR – циклический сдвиг вправо через флажок переноса
RET – возврат из процедуры

ROL – циклический сдвиг влево
ROR – циклический сдвиг вправо
SAHF – загрузка AH в регистр флагов
SAL – арифметический сдвиг влево
SAR – арифметический сдвиг вправо

SBB – двоичное вычитание с заёмом
SCAS – сканирование строки
SHL – логический сдвиг влево
SHR – логический сдвиг вправо
STC – установка флага переноса
STD – установка флага направления

STI – установка флага разрешения прерывания
STOS – запись строки
SUB – двоичное вычитание
TEST – логическое сравнение
WAIT – ожидание сопроцессора
XCHG – обмен информацией
XLATB – табличная перекодировка

XOR – исключающее ИЛИ
DS:/ES:/SS:/CS: – префиксы замены сегмента
LOCK – блокировка шины
REP/REPcc – повторение строковой операции
Приложение Коды операций
Приложение Время выполнения команд

Содержание раздела