Архитектура 16-разрядного процессора первого поколения
Однокристальный 16-разрядный МП Intel 8086 (К1810ВМ86) имеет мультиплексную 20-разрядную ША и 16-разрядную ШД и рассчитан на работу как в одно, так и в многопроцессорных системах. Процессор 8086 на языке ассемблера совместим с МП 8080, регистры и систему команд которого можно рассматривать как подсистему регистров и команд МП 8086.
Эффективность работы МП существенно повышена за счет введения команд математических операций (включающих умножение и деление) над 8- и 16-разрядными числами, команд побитовой обработки чисел, команд работы с массивами данных, расширения видов прерываний работы МП, а также реализации конвейерного типа выполнения команд в самой БИС. МП может работать с памятью объемом до 1 Мбайт, обмениваться информацией с 64 Кбайт внешних устройств, имеет 256 типов различных прерываний.
Упрощенная структурная схема БИС К1810ВМ86 приведена на рисунке 6.2. Блок сопряжения с шинами BIU производит все пересылки данных и кодов для EU. Пересылки между памятью или внешними устройствами осуществляется по требованию EU. В то время как EU занят выполнением команды, блок BIU получает последующие в программе коды из памяти. Блок выполнения команд EU имеет 16-разрядные АЛУ с регистром состояния и флажками управления, а также РОНы. Все регистры и внутренние магистрали блоки 16-разрядные. Блок не имеет связи с внешними шинами МП.
На АЛУ поступают коды команд из конвейера команд, расположенного в BIU. Если в результате дешифрации кода команд в АЛУ необходимо получение одного или нескольких операндов по внешним магистралям МП, то EU запрашивает BIU на получение и размещение необходимых данных в BIU.
Рисунок 6.2 – Структурная схема 16-разрядного микропроцессора 8086 |
Несмотря на то, что все адреса, с которыми оперирует EU, 16-разрядные, BIU производит необходимые преобразования адресов так, чтобы EU имел возможность обращаться по всему возможному адресному пространству (1 Мбайт) МПС. BIU считывает команды с памяти и сохраняет их в конвейере команд, где может быть размещено до 6 инструкций. Это позволяет BIU выдавать их в EU по мере надобности без дополнительной загрузки внешней шины. BIU организует получение нового кода команды как только два байта из конвейера будут переданы в EU.
В большинстве случаев в BIU находится хотя бы одна команда и EU не простаивает, пока очередная команда будет извлечена из памяти. Коды подаются в EU последовательно, так как они записаны в программе. Если EU выполняет команду передачи управления в другое место программы, то BIU очищает конвейер команд, получает код из нового адреса, передает его в EU и начинает заполнять конвейер заново. Если EU требует обращения к внешнему устройству, то BIU приостанавливает процесс получения команд в конвейер и организует необходимый цикл обмена данными.
Любая ячейка памяти МП имеет два типа адресов: физический и логический. Физический адрес представляется 20-разрядным числом и однозначно определяет любую из 1 Мбайт ячеек памяти. В 16-разрядной системе адреса расположены в диапазоне от 0 до FFFFF. Весь обмен информацией МП с памятью осуществляется с использованием физических адресов. Программы же больше используют логические или физические адреса и позволяют записывать команду без предварительных знаний места, где эта команда будет размещена в памяти. Это дает программисту возможность маневрировать при распределении памяти, увеличивает гибкость программного обеспечения.
Логический адрес состоит из двух основных частей: значения базы сегмента и значения смещения в сегменте. Базовый адрес и смещение в сегменте отображаются 16-разрядными числами. Как только BIU обращается к памяти, базовый адрес формирует физический по принципу: Значение базы сегмента смещается на четыре разряда влево, и полученное 20-разрядное число (с четырьмя нулями в младших четырех разрядах) складываются со значением смещения в сегменте. Таким образом, база сегмента (с четырьмя нулями, добавленными в качестве младших разрядов) задает для памяти сегменты длинной 64 Кбайт, а значение сегмента в смещении – расстояние от начала сегмента до искомого адреса памяти. Максимально возможное смещение в сегменте равно 64 Кбайт. В любой момент времени программа может осуществлять доступ к одному из четырех сегментов:
сегменту текущего кода (Current Code Segment – CS);
сегменту текущих данных (Current Date Segment - DS);
сегмент текущего значения стека (Current Stack Segment – SS);
дополнительный сегмент текущих значений (Current Extra Segment – ES).
Каждый из этих сегментов может быть задан с помощью записи числа в соответствующий 16-разрядный регистр сегментов МП БИС. В большинстве случаев в МПК К1810 сегменты могут быть заданы в программе произвольно по усмотрению программиста.
В зависимости от команд, блок BIU получает информацию о логическом адресе памяти из различных регистров МП. Коды команд всегда извлекаются из адреса памяти, определяемого содержимым регистра текущего кода и регистра указателя команд IP (Instruction Pointer). В IP записано смещение в сегменте текущего кода. Команды со стеком всегда используют для адресации SS и регистр – указатель стека SP (Stack Pointer), где записано смещения в сегменте текущего значения стека. Данные или переменные в командах извлекаются из памяти, адреса которых расположены в сегменте текущих данных, хотя по директивам команд это можно сделать и с помощью всех остальных сегментов. При вычислении физического адреса смещение в сегменте задается в EU, так как в нем происходит дешифрация кода команд и определение сегмента памяти, с которых будет работать БИС в текущий момент времени.