Регистр флагов

Регистры микропроцессора КР580ВМ80А

Порядок выполнения команд программы зависит от особенностей (признаков) текущих результатов. Для индикации складывающейся ситуации МП формирует двоичные признаки (флаги), отражающие признаки результатов выполнения команд. Значение каждого признака фиксируется в специальном триггере, которые в совокупности образуют регистр кода условия (регистр флагов F, регистр состояния RS). Содержимое аккумулятора и регистра флагов называют словом состояния программы PSW (Program Status Word).

Регистр признаков имеет следующий формат:

В МП КР580ВМ80А имеется 5 флагов:

C (Carry) — признак переноса;

M (Minus) — признак отрицательного результата;

Z (Zero) — признак нуля;

P (Parity) — признак паритета/четности;

AC (Auxiliary Carry) — признак половинного переноса.

Установка флагов производится при выполнении следующих условий:

Флаг знака M устанавливается, если знаковый бит результата операции (седьмой разряд аккумулятора) равен 1, иначе сбрасывается;

Флаг нуля Z устанавливается, если результат операции в аккумуляторе равен нулю, иначе сбрасывается;

Флаг дополнительного переноса AC устанавливается при наличии переноса из третьего разряда аккумулятора в четвертый, иначе сбрасывается;

Флаг четности P устанавливается, если результат операции в аккумуляторе содержит четное число единиц, иначе сбрасывается;

Флаг переноса C устанавливается при наличии переноса (при сложении) или заема (при вычитании) из старшего разряда аккумулятора, иначе сбрасывается.

Важнейшими флагами являются:

- флаг С, позволяющий реализовать на 8-разрядном МП обработку данных длиной в произвольное число байт;

- флаг Z, используемый для организации циклов и ветвлений;

- флаг M, используемый для организации ветвлений по знаку результата.

Для организации ветвлений в составе команд микропроцессора предусмотрен обширный набор команд условной передачи управления, осуществляющих выбор одного из двух направлений перехода в зависимости от состояния проверяемого флага.

Восьмиразрядный аккумулятор А используется в подавляющем большинстве команд логической и арифметической отработки. Обычно он адресуется неявно и служит как источником операнда, так и приемником результата. Благодаря этому в командах ВМ80А явно указывается только один операнд.

Регистр HL, как правило, служит адресным регистром. При косвенной регистровой адресации он хранит 16-разрядный адрес основной памяти. В этом случае к нему ссылаются с помощью мнемоники М (Memory), например:

MOV A, M — содержимое ячейки (HL) заносится в аккумулятор

В некоторых командах старший и младший байты 16-разрядного регистра HL могут адресоваться независимо и использоваться как отдельные 8-разрядные регистры данных H (High Byte) и L (Low Byte) соответственно.

Регистры PC и SP выполняют свою обычную функцию счетчика команд и указателя стека.

Регистр SP — указатель стека. Стековая память — это особый способ организации памяти, работающей по принципу «первый вошел ‒ последний вышел».

На рисунке 3.8 схематично изображен процесс записи информации в стек и чтения из стека. Квадратиками обозначены ячейки памяти. Каждая из них хранит одно восьмиразрядное число. При записи информации в стек новый байт всегда помещается в самую первую ячейку стека. Одновременно, содержимое этой ячейки, занесенное туда в предыдущем цикле записи, перемещается во вторую ячейку. Содержимое второй — в третью, и так далее. То есть, все содержимое стека сдвигается на один шаг вправо.

Так можно делать до тех пор, пока все ячейки не заполнятся полезной информацией. На рисунке 3.8 изображен стек, состоящий из шести ячеек (говорят — стек глубиной в шесть ячеек). При записи седьмого байта первый байт будет потерян. Поэтому при использовании стековой памяти всегда нужно следить, чтобы его глубина была достаточной.

Процесс считывания информации из стека происходит в обратном порядке. В каждом цикле чтения, извлекается содержимое самой крайней ячейки памяти. Содержимое остальных ячеек сдвигается в обратную сторону так, что число из ячейки 2 переписывается в ячейку 1, из ячейки 3 — в ячейку 2, и т.д.

Рисунок 3.8 — Иллюстрация работы стековой памяти

В микропроцессорной технике стековая память используется очень широко. Обычно она применяется для временного хранения каких-либо данных, пока выполняется некая операция. Например, часто стоит задача — сохранить содержимое некоторых регистров процессора на время работы какой-либо подпрограммы или процедуры обработки прерывания. Для этого в начале подпрограммы помещают несколько операторов, последовательно сохраняющих содержимое всех важных регистров в стековой памяти. После того, как регистры сохранены, подпрограмма может свободно использовать их для любых своих целей. В конце подпрограммы данные извлекаются из стека в обратном порядке и помещаются в те же самые регистры.

Стек организуется в обычной памяти данных. Для этого и применяется регистр - указатель стека (SP). В начале работы программы в этот регистр необходимо записать некий начальный адрес, называемый «вершина стека». Это тот адрес, по которому будет записываться самое первое число, посылаемое в стек. В системе команд процессора имеется две специальные команды работы со стеком. Это команда записи в стек и команда извлечения из стека.

По команде записи в стек процессор записывает информацию в ячейку, адрес которой хранится в регистре SP, а затем увеличивает содержимое SP на единицу. Если теперь снова подать команду записи в стек, то новое число запишется уже по новому адресу, а содержимое указателя стека еще раз увеличится на единицу.

По команде чтения из стека процессор сначала уменьшает содержимое регистра указателя стека на 1, а затем читает байт по этому адресу. В результате такой последовательности действий, процессор читает именно тот байт, который был записан последним.

Преимущество такого построения в том, что, меняя начальный адрес вершины стека (то есть содержимое регистра SP), мы можем использовать для стековой памяти любую область ОЗУ. Необходимо лишь следить за тем, чтобы для стека было отведено достаточное пространство и это пространство не использовалось бы для других целей.

8-разрядные регистры F, A вместе с 16-разрядными регистрами HL, SP и PC образуют стандартный регистровый набор микропроцессора с аккумулятором. Этот набор расширен четырьмя 8-разрядными регистрами общего назначения (РОН): B, C, D, E, которые в некоторых командах объединяются в 16-разрядные парные регистры BC и DE. Младшими регистрами пары являются соответственно регистры C и E. Введение РОН позволило создать достаточно эффективный микропроцессор с широкими функциональными возможностями.

В командах ссылки на регистр выполняются как явно, когда регистр кодируется трехразрядным полем, так и неявно (с помощью кода операции), когда код операции подразумевает и способ использования регистров по умолчанию.