Родоначальником современного семейства процессоров фирмы Intel является процессор i8086. На рисунке 2 представлена структурная схема этого процессора. В его состав входят: устройство управления (УУ), арифметико-логическое устройство (АЛУ), блок преобразования (формирования) адресов и регистры.
Рисунок 2 – Структура процессора i8086
УУ дешифрирует коды команд и формирует необходимые управляющие сигналы. АЛУ осуществляет необходимые арифметические и логические преобразования данных. В блоке преобразования адресов формируются физические адреса данных, расположенных в основной памяти. И, наконец, регистры используются для хранения управляющей информации: адресов и данных.
Всего в состав микропроцессора i8086 входят четырнадцать 16-ти битовых регистров, каждый из которых может иметь специальное назначение, которое будет пояснено далее:
а) четыре регистра общего назначения (называемые также регистрами данных):
AX – регистр-аккумулятор,
BX – базовый регистр,
СХ – счетчик,
DX – регистр-расширитель аккумулятора;
б) три адресных регистра, которые должны использоваться для хранения частей адреса данных, если в этом есть необходимость или применяется соответствующая команда:
SI – регистр индекса источника,
DI – регистр индекса результата,
BP – регистр-указатель базы;
в) три управляющих регистра:
SP– регистр-указатель стека,
IP – регистр-счетчик команд,
Flags – регистр флагов;
г) четыре сегментных регистра:
CS – регистр сегмента кодов,
DS – регистр сегмента данных,
ES – регистр дополнительного сегмента данных,
SS –регистр сегмента стека.
Организация основной памяти ВС на базе процессоров i8086.Минимальной адресуемой единицей основной памяти является байт, состоящий из 8 бит. Адресовать отдельно бит нельзя. Если необходимо получить доступ к определенному биту, то сначала ищется соответствующий байт, а затем уже в нем – нужный бит.
Номер байта является его физическим адресом в устройстве памяти.
Для размещения программ и данных в основной памяти выделяются специальные области – сегменты. Сегмент при 16-ти разрядной адресации – фрагмент памяти, начинающийся с адреса кратного 16 и имеющий размер от 1 байта до 64 Кб.
Следовательно, базовый адрес сегмента всегда содержит в 4-х младших разрядах нули. Старшая часть адреса сегмента без последних четырех нулей называется сегментным адресом и хранится в одном из 4-х сегментных регистров. При этом каждый сегментный регистр используется для хранения адреса определенного сегмента:
¨ СS – сегмента кодов, т.е. собственно программы;
¨ DS, ES – сегмента данных;
¨ SS – сегмента стека.
Физический адрес любых данных в памяти формируется из 16-ти битового смещения и 16-ти битового сегментного адреса по специальной схеме. Сначала к сегментному адресу аппаратно дописываются 4 двоичных нуля. В результате получается 20-ти битовый физический адрес начала сегмента. Затем выполняется сложение 20-ти битового базового адреса сегмента и 16-ти битового смещения. Откуда получается 20-ти битовый физический адрес данных (см. рисунок 3).
Рисунок 3 – Формирование 20-ти разрядного физического адреса
Таким образом, для адресации основной памяти в микропроцессоре i8086 предусматриваются 20-битовые адреса, что позволяет работать с основной памятью до 1 Мб.
Если программа включает более чем в один сегмент кодов, данных и стека, то сегментные регистры в процессе ее работы перегружаются.
Смещение для каждого типа сегмента формируется по своим правилам (см. рисунок 4). Для стека смещение хранится в регистре SP, для сегмента кодов – в IP, а для сегментов данных – рассчитывается в соответствие с форматом команды, как исполнительный адрес.
Рисунок 4 – Адресация различных сегментов сегментными регистрами
Стек при 16-ти разрядной адресации представляет собой специальным образом организованную область памяти, осуществляющую последовательную запись элементов данных длиной 2 байта (слово) и чтение их в порядке, обратном порядку записи. Для хранения адреса последнего слова, занесенного в стек, служит регистр-указатель стека SР. Каждый раз при записи данных значение SP уменьшается на 2, а при чтении – увеличивается на 2 (см. рисунок 5). Таким образом, стек растет в область младших адресов, и в начальный момент времени указатель SP должен содержать максимально возможное для конкретного размера стека смещение.
Рисунок 5 – Процессы записи в стек и чтения из стека:
а – текущее состояние стека, б – запись X, в – чтение X
Стек используется для временного хранения данных и адресов, например при вызове подпрограмм, когда в стек заносится адрес возврата и значения параметров, передаваемых в подпрограмму.
Формат команд процессора i8086 позволяет указывать в команде только один операнд, размещенный в основной памяти, т.е. одной командой нельзя, например, сложить содержимое двух ячеек памяти.
Принципиально допускается 8 способов задания исполнительного адреса операндов, размещенных в основной памяти:
1) SI + <смещение, заданное в команде>;
2) DI + <смещение, заданное в команде>;
3) BP + <смещение, заданное в команде>;
4) BХ+ <смещение, заданное в команде>;
5) BP + SI + <смещение, заданное в команде> ;
6) BP + DI +<смещение, заданное в команде> ;
7) BX + SI + <смещение, заданное в команде>;
8) BX + DI + <смещение, заданное в команде>.
Во всех случаях исполнительный адрес операнда определяется как сумма содержимого указанных регистров и смещения, заданного в команде и представляющего собой одно- или двухбайтовое число.
Выполнение программы.Содержимое регистров СS и IP, в которых хранятся базовый адрес сегмента кодов и смещение очередной команды относительно начала сегмента, определяет физический адрес команды, которая должна быть выполнена на следующем шаге.
По указанному адресу из основной памяти считывается команда и пересылается в процессор. Код команды длиной от 1 до 8 байт поступает в очередь команд, откуда передается в устройство управления для дешифрации.
Если при выполнении команды требуются данные, расположенные в основной памяти, то в специальном поле кода команды указывается способ адресации, согласно которому вычисляется исполнительный, а затем и физический адрес данных (см. далее).
Данные, считанные из основной памяти по указанному адресу, пересылаются в регистр данных или в арифметико-логическое устройство и обрабатываются в соответствии с кодом команды. Результат помещается в соответствии с командой либо в регистры, либо в заданную область основной памяти.
Если выполненная команда не являлась командой передачи управления, то содержимое регистра IP увеличивается на длину выполненной команды, в противном случае в регистр IP заносится исполнительный адрес следующей команды.
Затем процесс повторяется.
Флажковый регистр.На рисунке 6 представлен флажковый регистр Flags процессора i8086, в котором в виде однобитовых признаков по принципу ДА – НЕТ (ВКЛЮЧЕНО – ВЫКЛЮЧЕНО) фиксируется информация о результатах выполнения машинных команд, например арифметических.
Рисунок 6 – Флажковый регистр
Флаги флажкового регистра имеют следующее значение:
ОF – переполнение разрядной сетки;
DF – направление обработки строк: 0 – от младших адресов к старшим, 1 – от старших к младшим;
IF– разрешение прерывания;
ТF – разрешение трассировки при отладке процессора;
SF– признак знака: 1 – результат < 0, 0 – результат > 0
ZF – признак нуля: 1 – результат = 0
АF – признак наличия переноса из тетрады;
PF– признак четности младшего байта результата;
СF – признак переноса.
В последующем эта информация может использоваться, например, командами условной передачи управления.