[<>] ~~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}}