Регистры данных и аккумулятор
Микропроцессор Z80, в отличие от I8080, работает с двумя наборами регистров — основным и
альтернативным. Оба набора состоят из семи 8-разрядных регистров данных и флагового регист-
ра. Регистры основного набора обозначаются буквами А, В, С, D, E, H, L и F (флаговый). Реги-
стры альтернативного набора соответственно — А', В', С', D', E', H', L' и F'. Для пользова-
теля эти наборы совершенно идентичны, и знак ' (апостроф) означает лишь то, что в данный мо-
мент регистр не является активным. С помощью специальных команд можно переключать работу
процессора с одного набора регистров на другой. Но выяснить, какой из наборов активен в дан-
ный момент, невозможно.
Для выполнения многих команд обрабатываемые данные должны быть занесены в специальный ре-
гистр — аккумулятор А.
Команды, обрабатывающие 16-разрядные числа, используют пары регистров в следующих сочета-
ниях: ВС, DE, HL, AF и, соответственно, ВС', DE', HL', AF'. При этом в регистры В, D, H, А,
В', D', H', А' записывается старший байт числа, а в С, E, L, F, С', E', L' и F' — младший.
Спаренные регистры можно использовать, например, для хранения и обработки адресов ячеек па-
мяти.
_Счетчик команд
Выполнив очередную команду, процессор должен знать, откуда ему взять следующую. За этим
следит 1 6-разрядный регистр счетчика команд РС. При последовательном выполнении программы
после считывания из памяти каждого байта команды значение PC увеличивается на единицу. Если
команда требует от процессора перейти не к следующей, а какой-либо другой ячейке памяти (на-
пример, команда вызова подпрограммы), в PC записывается адрес этой ячейки.
_Индексные регистры
Важной особенностью Z80 является возможность обращаться к ячейкам памяти, указывая смеще-
ние их адреса относительно содержимого 16-разрядных индексных регистров IX и IY. Смещение
может быть задано числом в пределах-128...+ 127.
_Указатель стека
16 разрядный регистр указателя стека SP содержит адрес вершины стека. Как известно, стек —
это специальная область памяти, предназначенная для временного хранения данных. В Z80 он ор-
ганизован по принципу LIFO* — помещенные в стек одно за другим несколько чисел извлекаться
из стека будут в обратной последовательности. Особенностью Z80 является то, что стек «рас-
тет» в сторону уменьшения адресов. При каждой записи в стек значение регистра SP уменьшается
на 2, а при извлечении числа увеличивается на 2. «Общение» со стеком обычно происходит по-
*) Last In First Out — первым пришел — последним вышел (англ.).
средством регистровых пар. В стеке также автоматически сохраняется адрес возврата при вызове
подпрограмм.
_Регистр флагов
После выполнения ряда команд в соответствии с результатом операции изменяется содержимое
флагового регистра F (рис. 11). флагом называется отдельный бит этого регистра. Флаг счита-
ется установленным, если в соответствующем бите записана единица, и сброшенным, если записан
ноль. Значимыми являются 6 из 8 битов регистра F:
• Z (zero) — флаг нуля. Устанавливается, если результат операции равен нулю;
• P/V (parity/overflow) — флаг четности/переполнения. В логических операциях устанавлива-
ется при получении четного результата, в арифметических — при переполнении (изменении знака)
операнда;
• CY (carry) — флаг переноса. Устанавливается, если в итоге выполнения арифметических опе-
раций произошел перенос либо заем старшего бита;
• N (negative) — флаг отрицательного результата. Устанавливается при получении отрицатель-
ного результата арифметической операции;
• H (half-carry) — флаг вспомогательного переноса. Устанавливается, если произошел перенос
(заем) в 4-й бит аккумулятора. Используется при проведении двоично-десятичной коррекции при
работе с BCD-арифметикой*;
• S (sing) — флаг вычитания. Устанавливается, если предыдущей командой было вычитание. В
BCD-арифметике помогает определить тип предыдущей операции.
_Другие регистры
Регистр вектора прерываний I используется во 2-м режиме обработки прерываний. Подробно о
нем будет рассказано в разделе, посвященном прерываниям.
Регистр регенерации динамической памяти R обслуживает в основном аппаратные потребности
компьютера, однако он все же может использоваться и для программных целей, например, при на-
писании процедур, генерирующих случайные числа. Младшие семь разрядов этого регистра увели-
чиваются на единицу после выполнения очередной команды (точнее — цикла M1) микропроцессора,
старший разряд аппаратно не используется._
*) BCD — Binary Coded Decimal — двоично-десятичный код (англ.).