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

§11.3 Команды управления программой

В данном разделе рассматриваются основные базовые команды, исполь­зуемые для управления последовательностью выполнения программы.

Команда перехода (JUMP)

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

JUMP fir_start;

происходит переход по адресу с меткой fir_start.

Косвенная адресация по адресу, взятому из регистра

В случае таких переходов адрес перехода берется из одного из 4-х регистров генератора адреса данных DAG2 (14, 15, 16 или 17). Адрес выводится на шину АПП генератором адреса данных 2 и загружается в счетчик команд во время следующего цикла. Например при выполнении команды:

JUMP (14) ;

выполняется переход по адресу, содержащемуся в регистре 14.

Команда вызова (CALL)

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

Циклы, организованные с помощью команды DO UNTIL

В наиболее распространенной форме циклов DO UNTIL в качестве счетчика итераций используется регистр счетчика (CNTR). При использовании счетчика для управления итерациями цикла завершение цикла DO UNTIL про­исходит по выполнению условия СЕ (счетчик пуст). Ниже приведен простой пример цикла подобного типа:

L 0 = 1 0 ;

IO=^data_Üuffe;

М0= 1 ;

С N Т R = 1 0 ;

{установка регистра длины циклического буфера)

(загрузка указателя с первым адресом)

(циклического буфера)

(установка модифицирующего регистра для}

(приращения указателя)

(загрузка длины циклического буфера в)

(счетчик)

DO loop UNTIL СЕ; (задание повторения цикла до обнуления)

(счетчика)

DM(IO,MO)=0; (инициализация/очистка циклического буфера)

...любая команда...

loop:...любая команда...

Когда команда CNTR=10;выполняется до начала цикла, счетчик загружается с шины ДПД. Любой имев­шийся до этого в счетчике номер цикла одновременно помещается в стек; эта операция не выполняется, если счетчик пуст. Сама по себе команда DO loop UNTIL CE; только задает условия организации цикла. Во время выполнения этой команды не осуществляется никаких других операций. Это происходит только один раз, в начале первого прохождения цикла. При выполнении команды DO UNTIL адрес непосредственно следующей за ней команды помещается в стек счетчика команд (за счет помещения в стек инкрементированного значения счетчика команд). В течении того же цикла в стек циклов помещается адрес команды конца цикла и условие его завершения. По мере продолжения выполнения операций внутри цик­ла, компаратор сравнивает адрес каждой команды с адресом последней команды цикла. До достижения этого адреса программа выполняется последовательно.

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

Команда ожидания (IDLE)

По команде IDLE процессор входит в состояние неопределенного ожи­дания в режиме пониженной потребляемой мощности до получения сигнала пре­рывания. После обслуживания немаскируемого прерывания процессор переходит в нормальный режим работы, и программа выполняется дальше начиная с команды, следующей за командой IDLE. Команда ожидания (IDLE) с замедлением внутренней тактовой частоты процессора. Усовершенствованная версия команды IDLE позволяет замедлять внут­реннюю тактовую частоту процессора, уменьшая, таким образом, потребление энергоресурсов. Уменьшенная частота тактовых синхроимпульсов является прог­раммируемой дробной частью от нормальной тактовой частоты процессора и задается при помощи выбора соответствующего значения делителя в команде IDLE. Эта команда имеет следующий формат: IDLE (n) ;

где п=16, 32, 64 или 128. При выполнении данной команды процессор остается полностью работоспособным, но работает с меньшей внутренней тактовой часто­той. Когда процессор находится в описываемом состоянии, частота всех осталь­ных внутренних тактовых сигналов, например SCLK, CLKOUT, тактовых синхро­импульсов таймера, уменьшается в той же степени, что и внутренняя тактовая частота процессора. При отсутствии значения делителя в команде IDLE по умолчанию выполняется стандартная версия этой команды. При использовании команды IDLE (n) замедляется внутренняя тактовая частота процессора и, тем самым, увеличивается время ответа процессора на входящие прерывания. Необходимое при стандартном состоянии ожидания для ответа на прерывание время в один цикл увеличивается в n (значение делителя) раз. После получения сигнала разрешенного прерывания процессор остается в состоянии ожидания в течение, максимум, n циклов перед тем, как возобновить свою нормальную работу (п=16, 32, 64 или 128).

Когда команда IDLE (n) используется в системах, работающих с внеш­ними последовательными тактовыми синхроимпульсами (SCLK), частота послед­них может превышать внутреннюю тактовую частоту процессора. При таких усло­виях прерывания не должны генерироваться быстрее, чем они могут быть об­служены с учетом того дополнительного времени, которое требуется процессору для выхода из состояния ожидания (максимум и циклов процессора).