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



             

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


Поскольку код команды отсутствует, требуется специальный интерпретатор последовательности ссылок. Подпрограммы верхнего уровня должны начинаться машинными командами, выполняющими действие CALL (положить текущее значение указателя на стек возвратов, перевести указатель на начало последовательности адресов данной подпрограммы, исполнить NEXT) и заканчиваться адресом подпрограммы RETURN (снять значение со стека возвратов и заслать его в указатель, исполнить NEXT). Подпрограммы в машинном коде должны заканчиваться исполнением действия NEXT (скопировать адрес подпрограммы по текущему значению указателя в рабочую ячейку, перевести указатель на следующий элемент кода, передать управление по адресу в рабочей ячейке). В тех случаях, когда архитектура ЭВМ позволяет выразить действия CALL и NEXT одной-двумя машинными командами (например, для ЭВМ СМ-4), эти команды вставляются непосредственно в подпрограммы; если же требуется более длинная последовательность команд, то в подпрограммы вставляются команды перехода на соответствующие точки, которые выносятся в отдельное подпрограммное ядро.

Рис. 2.3. Косвенный шитый код

Косвенный шитый код уступает прямому по скорости исполнения, но имеет то преимущество, что его высокоуровневые подпрограммы не зависят от машины, поскольку не содержат машинных кодов. Как и в случае прямого кода, последовательность операций промежуточного языка состоит из последовательности адресов подпрограмм, разница заключается в организации этих подпрограмм и действиях интерпретатора (рис. 2.3.). Теперь чтобы передать управление на машинный код, в действии NEXT требуется выполнить еще одно разыменование. Подпрограмма верхнего уровня начинается не машинными командами для действия CALL, а ячейкой, где записан адрес этой точки, и заканчивается ячейкой, где записан адрес ячейки с адресом точки RETURN. Подпрограмму на машинном языке представляет ячейка, где записан адрес начала соответствующего кода. Завершающим действием такой подпрограммы, как и раньше, является исполнение действия NEXT.


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