Стек возвратов Каллисто

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Версия для печати больше не поддерживается и может содержать ошибки обработки. Обновите закладки браузера и используйте вместо этого функцию печати браузера по умолчанию.

Стек возвратов (англ. return stack) — участок памяти двоичных данных, который адресный интерпретатор Каллисто использует для хранения «адресов возврата». Пользователь имеет право хранить целые числа в стеке возвратов временно, при определенных условиях. (Использовано определение Лео Броуди)

Стек возвратов — собственная структура данных адресного интерпретатора (интерпретатора шитого кода) Каллисто.

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

  • >R переносит значения с вершины стека данных на стек возвратов.
  • R> выполняет обратное действие.
  • R@ копируют вершину стека возвратов на стек данных, сохраняя это значение на стеке возвратов (Слово I копирует беззнаковое значение).
  • RDROP удаляет верхний элемент со стека возвратов. Фраза R@ RDROP эквивалентна слову R>

Ещё три слова позволяют узнать и переустановить расположение стека возвратов:

  • RP@ — кладёт на стек адрес текущей вершины стека возвратов
  • R0переменная, которая содержит дно стека возвратов (при необходимости стек возвратов можно перенести в другое место памяти)
  • !RP — присваивает указателю стека возвратов исходное (базовое) значение из переменной R0

Буква R (от англ. return — возврат) в имени этих слов напоминает о том, что они работают со стеком возвратов. Все эти слова можно использовать только внутри компилируемых определений. Неосторожное манипулирование стеком возвратов может вызвать непредсказуемые последствия, вплоть до нестабильности среды. Отсутствие какого-либо контроля является ещё одной характерной чертой, заимствованной из языка Форт. Благодаря этому программист может реализовать любые конструкции (включая и средства контроля).

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

История

Стек возвратов появился в Форте в 1968-70 годах (Mohasco).

В 1968 году Чак Мур работал в Mohasco Industries, Inc (Amsterdam NY, англ.). У него в распоряжении был миникомпьютер IBM 1130 с графическим дисплеем IBM 2250 (16-битный процессор с ОЗУ 8К, дисководом, клавиатурой, принтером и ридером/панчером перфокарт).

Сперва Чак Мур написал на IBM 1130 кросс-систему для программирования IBM 2250, после чего написал полноценный Форт для IBM 1130. В этой версии интерпретатора, впервые получившей название FORTH, и появился стек возвратов.

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

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

Реализация

Стек возвратов размещён в конце памяти двоичных данных и растёт «вниз», в сторону уменьшения адресов. Каждый элемент стека возвратов — 16 битный и занимает два двоичных регистра, каждый размером в 1 байт. Как это принято в ЭКВМ, старший байт располагается по младшему адресу.

Размер стека возврата зависит от заполненности словаря. Обычно он вмещает многие сотни элементов.

Ссылки


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