Соглашение о связях.

Сохранение и восстановление значений.

Смысл подпрограмм – отделить логику (функцию, операцию как математический объект высокого уровня абстракции) от реализации, определение этой функции на данном языке программирования. Это обязывает к тому, чтобы стандартизировать все детали, не относящиеся к логике. Таким образом, всё, кроме имени функции (адреса начала подпрограммы) и структуры параметров, должно быть общим для всех вызовов. В частности, стандартными должны быть имена vozvrat и pParam. Соответствующее требование носит название стандартного соглашения о связях. Наша схема пока не поддерживает соглашения о связях, а, следовательно, и кратных вызовов.

 

вызов1 вызов2

 

vozvrat vozvrat

       
   

 

 


возврат2 возврат1

восстановление

 

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

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

 

oldvozvrat:=vozvrat

 
 

 


 

vozvrat:=oldvozvrat

восстанавливает

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