Виды машинных циклов. Слово состояния процессора. Слово состояния МП КР580ВМ80А. Ввод-вывод в режиме прерывания. Алгоритм обслуживания прерываний, страница 13

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

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

Команды переходов могут быть безусловными или условными. По команде безусловного перехода JMP addr происходит переход к ячейке памяти, адрес которой указан во втором и третьем байтах команды (то есть здесь используется способ прямой адресации). Команды условного перехода (JMP conditionaddr) обеспечивают переход по адресу, указанному во втором и третьем байтах, только при удовлетворении некоторого условия, заданного в КОП. Если условие не выполняется, перехода по указанному адресу не происходит, и МП выполняет следующую по порядку команду (т.е. в этой ситуации команда перехода эквивалентна холостой операции). Проверяемым условием является текущее значение одного из триггеров состояния регистра признаков (какого – указывается в коде команды). Для удобства программирования предусмотрены команды переходов, осуществляющие передачу управления, как по единичному, так и по нулевому значению триггеров состояний. Так, например, команда JC предусматривает переход, если бит переноса равен 1 (т.е. был перенос), а команда JNC – если бит переноса равен 0 (т.е. не было переноса).

Часто повторяющиеся фрагменты программы с целью сокращения объема занимаемой программой памяти оформляют в виде так называемых подпрограмм, которые в адресном пространстве микроЭВМ располагаются за пределами программы. В самой же программе, где это нужно, записывается команда перехода к подпрограмме CALL. По этой команде МП сохраняет текущее значение счетчика команд (а это адрес следующей по порядку команды основной программы) в стеке (этот адрес будет использован для возврата из подпрограммы в основную программу), и загружает счетчик команд вторым и третьим байтами команды CALL, содержимое которых и есть адрес начала подпрограммы. Этот адрес выставляется на ША и МП переходит к выполнению подпрограммы. Подпрограмма обязательно заканчивается командой возврата RET. По этой команде в счетчик команд из стека загружается адрес возврата из подпрограммы, и МП продолжает выполнять основную программу. Так как в команде RET нет необходимости указывать адрес возврата, она однобайтная.

В программе может предусматриваться несколько подпрограмм. К какой из них переходить в каждом конкретном месте программы определяют второй и третий байты команды CALL. Возврат же из любой подпрограммы будет происходить в ту точку основной программы, откуда был осуществлен переход к подпрограмме (к ячейке памяти, следующей за последней исполненной командой CALL). Большая глубина стека МП КР580ВМ80А позволяет использовать вложение подпрограмм – то есть внутри подпрограммы может происходить переход к еще одной (вложенной) подпрограмме. При этом после каждого выполнения команды CALL МП запоминает в стеке адрес возврата. По командам RET  из стека в счетчик команд адреса возврата выталкиваются в обратном порядке, чем обеспечивается сначала возврат из вложенной подпрограммы, а затем - в основную программу. Таких вложений подпрограмм может быть сколько угодно. На рисунке 4.1 схематически показан принцип выполнения подпрограмм.