Фантазии о Вселенной и мой личный сайт
Общие понятия о процессоре

Общие понятия о процессоре

Процессор, начиная с 8086/8087/8088, имеет совместимый со всеми последующими процессорами набор инструкции, что и продвинуло его на качественно новый уровень. Статья с Википедии для полного ознакомления

Регистры процессора

Процессор 8086 имеет 4 регистра общего назначения, 2 индексных, 2 указательных (всего 8), 4 сегментных, один указатель команды и регистр флагов.

Регистры общего назначения
ah al   ax Аккулятор (Accumulator)
bh bl   bx База (Base)
ch cl   cx Счетчик (Counter)
dh dl   dx Другое

Индексные регистры
  si    Индекс источника (Source Index)
  di    Индекс назначения (Destination Index)

Указательные регистры
  sp    Стек (Stack Pointer)
  bp    Указатель базы (Base Pointer)

Сегментные регистры
  cs    Код (Code Segment)
  ds    Данные (Data Segment)
  ss    Стек (Stack Segment)
  es    Экстра-сегмент (Extra Segment)

Указатель команды
  ip    Instruction Pointer

Регистр флагов

Более подробно в википедии.

Бит   Имя   Название
 0    CF    Флаг переноса
 1     1
 2    PF    Флаг чётности
 3     0
 4    AF    Вспомогательный флаг переноса
 5     0
 6    ZF    Флаг нуля
 7    SF    Флаг знака
 8    TF    Флаг трассировки
 9    IF    Флаг разрешения прерываний
 10   DF    Флаг направления
 11   OF    Флаг переполнения

О декодировании инструкции 8086

Каждая инструкция может содержать в себе следующие компоненты:

  • Префикс (один или несколько байт)
  • Опкод - конечный код операции (1 байт)
  • Байт ModRM - задает операнды (1 байт)
  • Displacement - 1/2-байтное значение "смещения" для ModRM
  • Immediate - 1/2-байтное значение непосредственного значения

В общей сложности, одна инструкция может занимать до 6 байт. Процессор, перед началом разбора инструкции, сканирует профиксы перед опкодом, которые потом повлияют на работу инструкции, потом считавается сам опкод. На основе опкода (кода операции) делается вывод, сканировать ли байт modrm и если да, то для него может понадобится также прочитать displacement. После этого, может быть прочитано значение immediate, если это требуется.

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