Язык Форт и его реализации



         

Шитый код и его разновидности - часть 3


Из всех разновидностей шитого кода подпрограммный максимально эффективен по времени исполнения. Он удобен в том случае, когда архитектура данной ЭВМ включает аппаратные стеки, команду перехода на подпрограмму (перехода с возвратом), в которой адрес возврата запоминается на вершине стека, и команду возврата по адресу, находящемуся на вершине стека. Для ЭВМ СМ-4 и «Электроника-60» это команды JSR и RST, для микропроцессора К580 — команды CALL и RET.

Рис. 2.1. Подпрограммный шитый код

Структура подпрограммного шитого кода приведена на рис. 2.1. Каждая ссылка на операцию промежуточного языка представляется в виде машинной команды перехода на соответствующую подпрограмму. Стек возвратов используется для сохранения адреса возврата этими командами, а в качестве указателя текущего места в интерпретируемой последовательности ссылок выступает внутренний регистр счетчика адреса. Высокоуровневая подпрограмма на промежуточном языке представляет собой последовательность таких же команд перехода с возвратом, которая заканчивается командой возврата по адресу, снимаемому с вершины стека возвратов. Подпрограмма нижнего уровня должна заканчиваться такой же командой возврата для продолжения обработки. Таким образом, в подпрограммном шитом коде интерпретатор реализуется непосредственным образом в структуре самого кода. Действие NEXT состоит в исполнении пары команд JSR/RST, действие CALL как таковое отсутствует, действие RETURN состоит в команде RST. Подпрограммный шитый код в отличие от всех остальных разновидностей допускает большую оптимизацию по времени счета за счет непосредственной вставки подпрограмм нижнего уровня в место их вызова.

Рис. 2.2. Прямой шитый код

Прямой шитый код (рис. 2.2.) уступает подпрограммному по скорости исполнения, но дает выигрыш по объему памяти, необходимой для его размещения. В качестве последовательности операций промежуточного языка выступает последовательность адресов соответствующих подпрограмм. Ее можно рассматривать как последовательность вызовов подпрограммного шитого кода с удаленным кодом команды JSR (именно это и дает экономию объема памяти примерно на 1/3 по сравнению с подпрограммным кодом).


Содержание  Назад  Вперед