logo
КС-ZAO / Лекции ЦЭВМруский вариант11

§11.2. Программный автомат

Программный автомат генерирует адреса команд и обеспечивает гибкое управление программой. Он позволяет осуществлять последовательное выполнение команд, обработку прерываний оригинальным образом и реализовать за один цикл команды вызова, условного и безусловного перехода.

В данной главе, кроме описания логических устройств программного автомата, приводится также информация о командах, которые задают последова­тельность выполнения программы в процессорах семейства ADSP-2100. К ним относятся следующие команды:

DO UNTIL

JUMP

CALL

RTS (Return From Subroutine - возвращение в главную программу)

RTI (Return From Interrupt - возобновление работы после обслуживания

прерывания)

IDLE

Логическое устройство выбора адреса следующей команды

Пока процессор выполняет текущую команду, программный автомат осуществляет предварительную выборку следующей команды. Адрес этой команды выбирается в памяти программы логическим устройством выбора адреса следую­щей команды из одного из четырех источников:

инкрементор счетчика команд

стек счетчика команд

регистр команд

контроллер прерываний

компаратора циклов и контроллера прерываний. Затем адрес этой команды выводится на шину адреса памяти программы (АПП).

В случае последовательного выполнения программы, а также когда не предпринимается переход или возвращение по условию, или когда цикл DO UNTIL заканчивается, в качестве источника адреса следующей команды выбирает­ся инкрементор счетчика команд. Выходное значение инкрементора выводится на шину АПП и загружается обратно в счетчик команд для начала следующего цикла.

При возвращении из подпрограммы или после окончания обработки прерывания в качестве источника адреса следующей команды выбирается стек счетчика команд. Верхнее значение стека может также использоваться в качестве следующего адреса при возвращении к началу цикла DO UNTIL.

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

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

Еще одним источником адреса следующей команды может служить один из индексных регистров (14-17) Генератора адреса данных 2 (DAG2), Это проис­ходит при использовании косвенной адресации в такой команде перехода, как:

JUMP (14);

В этом случае в счетчик команд загружается значение из DAG2 через шину АПП. (

Счетчик команд и стек счетчика команд

Счетчик команд представляет собой 14-битовый регистр, в котором постоянно содержится адрес текущей выполняемой команды. Это значение увеличивается на 1 в 14-разрядном инкременторе. Выходное значение инкремен­тора может выбираться мультиплексором следующего адреса для выборки следую­щей последовательной команды.

Счетчик команд связан со стеком, содержащим до шестнадцати 14-битовых слов, в который при выполнении команды CALL помещается значение инкрементора. Стек счетчика команд заполняется также при выполнении команды DO UNTIL и при обработке прерываний. Однако, в случае прерывания, инкремен­тор игнорируется, а в стек помещается текущее значение счетчика команд (а не значение, на единицу большее). Таким образом можно возобновить выполне­ние преждевременно прерванной команды по окончанию обслуживания прерыва­ния. Данные автоматически помещаются и извлекаются из стека счетчика команд во всех вышеназванных случаях. Возможно и непосредственное извлечение дан­ных из стека посредством команды POP.

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

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

Счетчик циклов и стек счетчика

Счетчик циклов и стек счетчика обеспечивают программный автомат мощным механизмом для организации циклов. Счетчик представляет собой 14-битовый регистр с возможностью автоматического постдекрементирования, управ­ляющий последовательностью циклов программы, которые выполняются заданное число раз. Значения счетчика являются беззнаковыми величинами разрядностью 14 бит.

До начала цикла в счетчик (регистр CNTR) загружаются 14 младших бит с шины ДПД, являющиеся требуемым числом циклов. Действительному числу циклов N противопоставляется значение N - 1. Благодаря логической операции проверки состояния заполненности счетчика СЕ (счетчик пуст), которая вместе с автоматическим пост-декрементированием значения счетчика осуществляется в конце цикла DO UNTIL, степень заполненности счетчика используется в качестве условия прекращения цикла. Заполненность счетчика проверяется в начале каждого цикла процессора, и значение счетчика уменьшается на 1 в конце; таким образом, когда значение счетчика достигает 1, устанавливается, что счетчик пуст, а значит, цикл выполнен N раз.

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

Компаратор циклов и стек циклов

Команда DO UNTIL инициализирует цикл с нулевыми потерями ресурсов, используя компаратор (сравнивающее устройство) циклов и стек циклов прог­раммного автомата.

В каждом цикле компаратор сравнивает следующий адрес, сгенери­рованный программным автоматом, с адресом последней команды цикла (который содержится в команде DO UNTIL). Адрес первой команды в цикле устанавли­вается в вершине стека счетчика команд. Когда выполняется последняя команда цикла, процессор реализует операцию условного перехода на начало цикла без каких-либо издержек, которые могут возникнуть при организации цикла другим образом.

В стеке циклов, в котором может записываться до четырех уровней, содержатся адреса последних команд и условия окончания временно задержанных циклов. Единственный дополнительный цикл, связанный с организацией вло­женных циклов DO UNTIL, возникает при выполнении самой команды DO UNTIL, так как помещение и извлечение данных из всех стеков производится автоматически. При использовании состояния заполненности счетчика в качестве условия окончания цикла для начальной загрузки счетчика требуется другой цикл. В таблице 11.1 приводятся условия завершения цикла, которые могут исполь­зоваться совместно с командой DO UNTIL.

Таблица 11.1 Логические условия завершения цикла DO UNTIL

Синтаксис

Условие состояния

Истинно, если:

EQ

Равно нулю

AZ= 1

NE

Не равно нулю

AZ=0

L7

Меньше нуля

AN.XOR.AV = 1

GE

Больше или равно нулю

AN.XOR.AV = 0

LE

Меньше или равно нулю

(AN.XOR.AV).OR.AZ = 1

GT

Больше нуля

(AN.XOR.AV).OR.AZ = 0

АС

Перенос в АЛУ

АС= 1

NOT AC

Нет переноса в АЛУ

АС=0

AV

Переполнение в АЛУ

AV= 1

NOTAV

Нет переполнения в АЛУ

AV=0

MV

Переполнение в умножителе-накопителе

MV= 1

NOTMV

Нет переполнения в умножителе-накопителе

MV =0

NEG

Операнд Х последней команды ABS был

AS = 1

Отрицателен

POS

Операнд Х последней команды ABS был

AS =0

Положителен

CE

Счетчик пуст

FOREVER

Всегда

Случаи в примерах 2 и 3 также не исключаются, но для их надлежащего выполнения требуется более сложная программа.

Примечание:

Повышенная осторожность необходима в случае преждевременного выхода из цикла, а также в случаях, когда цикл заканчивается командами JUMP, CALL, RETURN или IDLE. Так как ни один из механизмов организации циклов не работает во время выполнения команд перехода/вызова/возврата, то в стеках счетчика, циклов и счетчика программ сохраняется не извлеченная информация, касающаяся организации цикла.

Поэтому для восстановления правильного состоя­ния процессора следует непосредственно извлечь эти данные из каждого задейст­вованного стека. При обращении к подпрограмме подобная проблема возникает только тогда, когда команда вызова стоит последней в цикле; в таких случаях по команде возврата осуществляется переход программы к команде, следующей сразу после цикла. Команды вызова подпрограмм, находящиеся внутри цикла и не являющиеся последней командой цикла, обрабатываются согласно процедуре, рассмотренной в примере 1.

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