Команды организации подпрограмм

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

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

В зависимости от наличия условия вызова и возврата различают команды условных и безусловных вызовов и возвратов. В этом смысле данные команды аналогичны командам передач управления.

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