Стек возвратов: различия между версиями

Материал из ПМК вики
Перейти к навигации Перейти к поиску
 
(не показано 5 промежуточных версий этого же участника)
Строка 3: Строка 3:
При переходе на подпрограмму, адрес команды, следующей за командой перехода, запоминается в ''стеке возвратов''. При возврате из подпрограммы, последний записанный адрес из ''стека возврата'' переносится в [[счетчик адреса]].
При переходе на подпрограмму, адрес команды, следующей за командой перехода, запоминается в ''стеке возвратов''. При возврате из подпрограммы, последний записанный адрес из ''стека возврата'' переносится в [[счетчик адреса]].


Подпрограмма может быть вызвана из другой подпрограммы. Глубина возможных вложений определяется размером ''стека возвратов''. В ЭВМ возможно использование до 64 уровней вложения подпрограмм.
Подпрограмма может быть вызвана из другой подпрограммы. Глубина возможных вложений определяется размером ''стека возвратов''. В ЭКВМ возможно использование до 64 уровней вложения подпрограмм.


== История ==
== История ==
Стек был изобретён в 1950’ые годы.
Стек был изобретён в 1946’ом году [https://ru.wikipedia.org/wiki/Тьюринг,_Алан Аланом Тьюрингом]. Изобретение стека позволило аппаратно реализовать вложенные подпрограммы и возврат из них. Сам термин ''стек'' (''англ.'' stack) появился позднее и приписывается [https://ru.wikipedia.org/wiki/Дейкстра,_Эдсгер_Вибе Эдсгеру Дейкстре].


В советских [[ПМК]] при полном заполнении ''стека возвратов'' из подпрограмм, а его глубина составляла всего 5 адресов, [[В/О|команда В/О]] вне подпрограммы начинала выполнять переход на адреса, зависящие от предыдущего содержимого ''стека возвратов'' (см. «Школа начинающего программиста. Занятие 26», В.А. Хмелюк, [[«Наука и жизнь»]] №11 - 1989 г.). В [[ЭКВМ]] переход в этом случае всегда выполняется по адресу 01 текущей страницы и от предыдущего содержимого стека не зависит. Глубина ''стека возвратов'' в [[ЭКВМ]] увеличена до 64 адресов, переполнение вызывает [[аварийный останов|сообщение об ошибке]].
В советских [[ПМК]] при полном заполнении ''стека возвратов'' из подпрограмм, а его глубина составляла всего 5 адресов, [[В/О|команда В/О]] вне подпрограммы начинала выполнять переход на адреса, зависящие от предыдущего содержимого ''стека возвратов'' (см. «Школа начинающего программиста. Занятие 26», В.А. Хмелюк, [[«Наука и жизнь»]] №11 - 1989 г.). В [[ЭКВМ]] переход в этом случае всегда выполняется по адресу 01 текущей страницы и от предыдущего содержимого стека не зависит. Глубина ''стека возвратов'' в [[ЭКВМ]] увеличена до 64 адресов, переполнение вызывает [[аварийный останов|сообщение об ошибке]].

Текущая версия от 03:21, 26 июня 2020

Стек возвратов из подпрограмм — одна из основных структур данных ЭКВМ.

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

Подпрограмма может быть вызвана из другой подпрограммы. Глубина возможных вложений определяется размером стека возвратов. В ЭКВМ возможно использование до 64 уровней вложения подпрограмм.

История[править]

Стек был изобретён в 1946’ом году Аланом Тьюрингом. Изобретение стека позволило аппаратно реализовать вложенные подпрограммы и возврат из них. Сам термин стек (англ. stack) появился позднее и приписывается Эдсгеру Дейкстре.

В советских ПМК при полном заполнении стека возвратов из подпрограмм, а его глубина составляла всего 5 адресов, команда В/О вне подпрограммы начинала выполнять переход на адреса, зависящие от предыдущего содержимого стека возвратов (см. «Школа начинающего программиста. Занятие 26», В.А. Хмелюк, «Наука и жизнь» №11 - 1989 г.). В ЭКВМ переход в этом случае всегда выполняется по адресу 01 текущей страницы и от предыдущего содержимого стека не зависит. Глубина стека возвратов в ЭКВМ увеличена до 64 адресов, переполнение вызывает сообщение об ошибке.

Ссылки[править]

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