[<>]
~~TOC wide~~
====== 2. Архитектура ЦП ======
Архитектуре МП Z80 является типичной для 8-разрядных микропроцессоров. В ней можно выделить следующие основные части:
* блок регистров,
* арифметическо-логическое устройство,
* регистр команд,
* дешифратор команд и устройство управления,
* схемы управления шинами адреса и данных.
{{pict_2_1.png|}}
\\ Рис. 2.1. Блок-схема ЦП Z80
{{anchor:n21}}
===== 2.1. Регистры =====
Программно доступными средствами ЦП являются 22 внутренних восьми- и шестнадцатиразрядных регистра. Они образуют три блока: 2 альтернативных блока (главный и вспомогательный) - по шесть 8-разрядных регистров, аккумулятору и регистру флагов в каждом, и блок специальных регистров.
FIXME
DELETEME
{{pict_2_2.png?600|}}
^ Блок \\ главных регистров |^ Блок \\ вспомогательных регистров || |
|Аккумулятор \\ 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
==== Специальные регистры ====
=== PC ===
Program Counter — Счётчик команд
Счётчик команд является программно доступным регистром, и используемся для приёма, преобразования и выдачи на шину адреса текущего 16-разрядного адреса команды. Содержимое счётчика команд автоматически инкрементируется после выборки каждого байта команды. В случаи перехода в программе, новый адрес автоматически заносится в счетчик команд.
=== SP ===
Btack Pointer — Указатель стека
Указатель содержит 16-разрядный адрес ячейки стека, к которой было последнее обращение Содержимое SP декрементируется, когда данные загружаются в стек и инкрементируется при чтении. Стек организуется во внешнем ОЗУ по принципу LIFO (Last In — First Out). Обмен данными между стеком и ЦП может быть автоматическим (как в случае обработки подпрограмм), либо командами PUSH и POP. Стек позволяет простую реализацию многоуровневых прерываний, практически неограниченное вложение подпрограмм и упрощение при многих видах обработки данных.
=== IX, IY ===
Indexregisters — Индексные регистры
Каждый из этик двух регистров может содержать 16-разрядный базовый адрес, используемый при индексной адресации. Базовый адрес складывается со смещением, которое указано в команде в дополнительном коде. Их сумма образует действительный адрес ячейки памяти, содержащей данные. Этот вид адресации удобен при обработке таблиц и массивов.
=== I ===
Interruptveotor register — Регистр вектора прерывания
Это 8-разрядный программно доступный регистр, используемый в режиме прерывания 2 (IM2) Он содержит старший байт вектора прерывания. Младший байт принимается от внешнего устройства. Путём их объединения формируется полный вектор прерывание. (Подробнее см. [[06|гл. 6]]).
=== R ===
Refreshregister — Регистр регенерации памяти
Это 8-разрядный программно доступный регистр, обеспечивавший возможность использования динамических ОЗУ без внешних схем регенерации. Содержимое его младших 7 разрядов автоматически увеличивается на единицу после каждой выборки команды. При этом восьмой бит сохраняет значение, полученное при выполнении команды загрузки этого регистра. Т.о. формируется адрес регенерации, который подается в младшую часть адресной шины во время декодирования и выполнения команды в ЦП (в старшую часть — содержимое регистра [[#I]]). Регенерация данного вида называется "прозрачной" и не снижает быстродействия процессора.
==== Главный и вспомогательный блоки регистров ====
ЦП Z80 содержит два альтернативных блока регистров: главный (A – L) и вспомогательный
(A' – L'). С точки зрения программиста оба блока абсолютно равноправны, но в данный момент
можно работать лишь с одним из них. Переключение этих блоков производится командами ЕХХ и EX AF.AF'. Такая организация удобна тем, что позволяет быстро сохранить содержимое регистровых блоков при вызове подпрограмм или при возникновении прерывания. Однако следует помнить: отсутствует средство подтверждения, какой из блоков (главный или вспомогательный) используется в данный момент.
=== A, A' ===
Accumulator — Аккумулятор
Каждый из двух блоков регистров содержит по одному 8-разрядному аккумулятору.
При арифметических и логических операциях он служит источником одного из операндов
и, как правило, приёмником результата. Второй операнд берётся из другого регистра, либо
из памяти.
Диапазон представления целых чисел без знака в аккумуляторе от 0 до 255, со знаком от -128 до +127.
=== F, F' ===
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. Регистр флагов
Флаги устанавливаются в следующих условиях:
* S=1, если результат операции отрицателен.
* Z=1, если результат операции равен нулю.
* Н=1, если при арифметической операции был перенос между битами 3 и 4.
* P/V=1,
* а) если при логических операциях и командах сдвига количество установленных в единицу битов чётно (функция чётности P);
* б) если результат арифметической операции находится вне диапазона представления чисел со знаком, т.е. меньше -128, либо больше +127 (функция переполнения V).
* N=1, если в предыдущей команде выполнялось вычитание (команды типа SUB, DEC, CMP).
* C=1, если при сложении возникает перенос из 7 бита аккумулятора, либо при вычитании — заём. В командах сдвига состояние флага C однозначно соответствует сдвигаемому в него биту.
==== Регистры общего назначения (РОН) ====
┌───┬───┬───┬───┬───┬───┐
│ В │ С │ D │ E │ H │ L │
├───┼───┼───┼───┼───┼───┤
│ B'│ C'│ D'│ E'│ H'│ L'│
└───┴───┴───┴───┴───┴───┘
Могут быть использованы как накопители данных или указатели адресов операндов. РОНы могут использоваться как самостоятельные 8-разрядные регистры, либо как 16-разрядные попарно:
┌───┬───┬───┐
│ВС │DE │HL │
└───┴───┴───┘
и
┌───┬───┬───┐
│ВС'│DE'│HL'│
└───┴───┴───┘
{{anchor:n22}}
===== 2.2. Арифметическо-логическое устройство (АЛУ) =====
В АЛУ выполняются арифметические и логические действия над 8-разрядными
операндами. Внутренне АЛУ связано с регистрами и через внутреннюю шину данных с внешней
шиной. В АЛУ выполняются следующие операции:
* сложение;
* вычитание
* логическое И;
* логическое ИЛИ;
* логическое исключающее ИЛИ;
* сравнение;
* увеличение на единицу;
* уменьшение на единицу;
* установка и сброс бита;
* анализ значения бита;
* сдвиг влево и вправо (арифметический и логический);
* вращение влево и вправо (циклический сдвиг).
{{anchor:n23}}
===== 2.3. Регистр команд и устройство управление процессором =====
После извлечения команды из памяти, она загружается и регистр команд. Дешифратор команд, входящий в устройство управления, преобразует код команды в управляющие сигналы:
* внутренние, необходимые для считывания/записи данных в регистры и управления АЛУ,
* внешние, подаваемые на шину управления.
Кроме того, устройство управления реагирует на внешние управляющие сигналы.
{{anchor:n24}}
===== 2.4. Управление шинами адреса и данных =====
Блок управления ША состоит из регистра адреса и буфера адреса. Буфер адреса представляет собой выходные формирователи с тремя устойчивыми состояниями. Он предназначен для выдачи 16-разрядного адреса из регистра адреса на шину.
Блок управления ШД представляет собой бинаправленную трёхстабильную схему, применяемую для обмена информацией ЦП с внешними устройствами. При выводе информации содержимое внутренней ШД запоминается в 8-разрядном регистре и через выходные формирователи выдается на внешнюю вину данных.
----
[<>]
{{tag>Z80 microprocessor_kit_z80-book1}}