Введение в программирование

       

Определение и активация подпрограмм


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

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

Для выполнения подпрограммы производится ее активация, в результате чего создаются:

  • сегмент кода, содержащий выполняемый код и константы;
  • сегмент данных, называемый также записью активации, содержащей локальные переменные и параметры.

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

Каждая активация подпрограммы использует один единожды созданный сегмент кода.

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

Результатом выполнения функции всегда является возврат некоторого значения.

При выполнении программы текущая выполняемая команда идентифицируется двумя указателями:

  • CIP-указатель (current instruction pointer) является указателем текущей команды сегмента кода;
  • CEP-указатель (current environment pointer) является указателем текущей записи активации. CEP-указатель иногда также называется указателем текущей среды, так как определяет среду всех объектов данных, используемых подпрограммой.

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



Содержание раздела