Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 3000544.doc
Скачиваний:
26
Добавлен:
30.04.2022
Размер:
14.75 Mб
Скачать

Подпрограммы

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

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

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

Если мы хотим реализовать возможность использования вложенных подпрограмм, то мы должны запоминать не один адрес возврата, а адреса возврата из каждой вызываемой подпрограммы. Для того, чтобы не нарушать логику программы, они должны извлекаться для использования в порядке, противоположном порядку их запоминания при входе в подпрограммы.

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

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

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

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

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

Кроме подпрограмм имеется другой механизм изменения порядка выполнения программ. Это прерывания, которые вызываются внутренними и внешними событиями и специальным типом команд.