Архитектуре МП Z80 является типичной для 8-разрядных микропроцессоров. В ней можно выделить следующие основные части:
Программно доступными средствами ЦП являются 22 внутренних восьми- и шестнадцатиразрядных регистра. Они образуют три блока: 2 альтернативных блока (главный и вспомогательный) - по шесть 8-разрядных регистров, аккумулятору и регистру флагов в каждом, и блок специальных регистров.
Блок главных регистров | Блок вспомогательных регистров | |||
---|---|---|---|---|
Аккумулятор A (8) | Флаги F(8) | Аккумулятор A' (8) | Флаги F' (8) |
|
B (8/16) | C(8) | B' (8/16) | C' (8) | Регистры общего назначения |
D (8/16) | E(8) | D' (8/16) | E' (8) | |
H (8/16) | L(8) | H' (8/16) | L' (8) |
Вектор прерывания I (8) | Регенерация памяти R (8) | Специальные регистры |
---|---|---|
Индексный регистр | IX (16) | |
Индексный регистр | IY (16) | |
Указатель стека | SP (16) | |
Счётчик команд | PC (16) |
Рис. 2.2. Регистры ЦП Z80
Program Counter — Счётчик команд
Счётчик команд является программно доступным регистром, и используемся для приёма, преобразования и выдачи на шину адреса текущего 16-разрядного адреса команды. Содержимое счётчика команд автоматически инкрементируется после выборки каждого байта команды. В случаи перехода в программе, новый адрес автоматически заносится в счетчик команд.
Btack Pointer — Указатель стека
Указатель содержит 16-разрядный адрес ячейки стека, к которой было последнее обращение Содержимое SP декрементируется, когда данные загружаются в стек и инкрементируется при чтении. Стек организуется во внешнем ОЗУ по принципу LIFO (Last In — First Out). Обмен данными между стеком и ЦП может быть автоматическим (как в случае обработки подпрограмм), либо командами PUSH и POP. Стек позволяет простую реализацию многоуровневых прерываний, практически неограниченное вложение подпрограмм и упрощение при многих видах обработки данных.
Indexregisters — Индексные регистры
Каждый из этик двух регистров может содержать 16-разрядный базовый адрес, используемый при индексной адресации. Базовый адрес складывается со смещением, которое указано в команде в дополнительном коде. Их сумма образует действительный адрес ячейки памяти, содержащей данные. Этот вид адресации удобен при обработке таблиц и массивов.
Interruptveotor register — Регистр вектора прерывания
Это 8-разрядный программно доступный регистр, используемый в режиме прерывания 2 (IM2) Он содержит старший байт вектора прерывания. Младший байт принимается от внешнего устройства. Путём их объединения формируется полный вектор прерывание. (Подробнее см. гл. 6).
Refreshregister — Регистр регенерации памяти
Это 8-разрядный программно доступный регистр, обеспечивавший возможность использования динамических ОЗУ без внешних схем регенерации. Содержимое его младших 7 разрядов автоматически увеличивается на единицу после каждой выборки команды. При этом восьмой бит сохраняет значение, полученное при выполнении команды загрузки этого регистра. Т.о. формируется адрес регенерации, который подается в младшую часть адресной шины во время декодирования и выполнения команды в ЦП (в старшую часть — содержимое регистра I). Регенерация данного вида называется «прозрачной» и не снижает быстродействия процессора.
ЦП Z80 содержит два альтернативных блока регистров: главный (A – L) и вспомогательный (A' – L'). С точки зрения программиста оба блока абсолютно равноправны, но в данный момент можно работать лишь с одним из них. Переключение этих блоков производится командами ЕХХ и EX AF.AF'. Такая организация удобна тем, что позволяет быстро сохранить содержимое регистровых блоков при вызове подпрограмм или при возникновении прерывания. Однако следует помнить: отсутствует средство подтверждения, какой из блоков (главный или вспомогательный) используется в данный момент.
Accumulator — Аккумулятор
Каждый из двух блоков регистров содержит по одному 8-разрядному аккумулятору. При арифметических и логических операциях он служит источником одного из операндов и, как правило, приёмником результата. Второй операнд берётся из другого регистра, либо из памяти.
Диапазон представления целых чисел без знака в аккумуляторе от 0 до 255, со знаком от -128 до +127.
Flagregister — Флаговый регистр
В составе каждого блока регистров имеется свой флаговый регистр. Флаговый регистр (называемый также регистром условий) содержит набор одноразрядных признаков, которые устанавливаются по результату операции. Флаговые биты 7, 6, 2, 0 служат для реализации условных переходов и условных вызовов подпрограмм или возвратов; биты 4 и 1 служат для реализации двоично–десятичной арифметики.
7 6 5 4 3 2 1 0 ┌───┬───┬───┬───┬───┬───┬───┬───┐ │ S │ Z │ — │ H │ — │P/V│ N │ С │ └─▲─┴─▲─┴─▲─┴─▲─┴─▲─┴─▲─┴─▲─┴─▲─┘ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └─ флаг переноса (carry flag ) │ │ │ │ │ │ │ │ │ │ │ │ │ └─ флаг сложения/вычитания (add/substract flag) │ │ │ │ │ │ │ │ │ │ │ └─ флаг чётности/переполнения (parity/overflow flag) │ │ │ │ │ │ │ │ │ └─ не используется │ │ │ │ │ │ │ └─ флаг полупереноса (halfcarry flag) │ │ │ │ │ └─ не используется │ │ │ └─ флаг нуля (zero flag) │ └─ флаг знака (sign flag)
Рис. 2.3. Регистр флагов
Флаги устанавливаются в следующих условиях:
┌───┬───┬───┬───┬───┬───┐ │ В │ С │ D │ E │ H │ L │ ├───┼───┼───┼───┼───┼───┤ │ B'│ C'│ D'│ E'│ H'│ L'│ └───┴───┴───┴───┴───┴───┘
Могут быть использованы как накопители данных или указатели адресов операндов. РОНы могут использоваться как самостоятельные 8-разрядные регистры, либо как 16-разрядные попарно:
┌───┬───┬───┐ │ВС │DE │HL │ └───┴───┴───┘ и ┌───┬───┬───┐ │ВС'│DE'│HL'│ └───┴───┴───┘
В АЛУ выполняются арифметические и логические действия над 8-разрядными операндами. Внутренне АЛУ связано с регистрами и через внутреннюю шину данных с внешней шиной. В АЛУ выполняются следующие операции:
После извлечения команды из памяти, она загружается и регистр команд. Дешифратор команд, входящий в устройство управления, преобразует код команды в управляющие сигналы:
Кроме того, устройство управления реагирует на внешние управляющие сигналы.
Блок управления ША состоит из регистра адреса и буфера адреса. Буфер адреса представляет собой выходные формирователи с тремя устойчивыми состояниями. Он предназначен для выдачи 16-разрядного адреса из регистра адреса на шину.
Блок управления ШД представляет собой бинаправленную трёхстабильную схему, применяемую для обмена информацией ЦП с внешними устройствами. При выводе информации содержимое внутренней ШД запоминается в 8-разрядном регистре и через выходные формирователи выдается на внешнюю вину данных.