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



         

Встроенный ассемблер - часть 2


Слово CODE (код) является определяющим для слов нижнего уровня и обычно определяется так:

: CODE ( ---> ) CREATE HERE LATEST NAME> ! ASSEMBLER ;

Оно используется в сочетании со словом END-CODE (конец кода): CODE <имя> <машинный-код> END-CODE, где «имя» является именем определяемого слова, а «машинный-код» — записью его реализации в машинном коде в соответствии с принятыми соглашениями.

Поле кода такой словарной статьи содержит адрес ее поля параметров, в котором располагается данный машинный код.

Наконец, слово ;CODE, имеющее признак немедленного исполнения, позволяет задавать исполняющую часть определяющих слов непосредственно в машинном коде:

: ;CODE ( ---> ) COMPILE (;CODE) [COMPILE] [ ASSEMBLER ; IMMEDIATE

Оно используется внутри определения через двоеточие для определяющего слова аналогично слову DOES>:

: <имя> <создающая-часть> ;CODE <машинный-код> END-CODE

и отделяет высокоуровневую создающую часть от исполняющей части, заданной в машинном коде. Во время исполнения скомпилированного словом ;CODE слова (;CODE) адрес машинной программы, составляющей исполняющую часть, будет заслан в поле кода определяемого слова, которое таким образом получит интерпретатор, реализованный в машинном коде. На практике именно таким способом задают стандартные определяющие слова — :, CONSTANT и VARIABLE.

Конкретный вид машинной программы зависит от архитектуры данной ЭВМ. Общим правилом является то, что этот текст представляет собой последовательность слов, которые исполняются текстовым интерпретатором, в результате чего на вершине словаря формируется соответствующий двоичный машинный код. Машинные команды записываются в естественной для Форта обратной польской форме: сначала операнды, а затем слово, обозначающее мнемонику команды.

Операнды — это слова, вычисляющие на стеке размещения операндов: номера регистров, адреса в памяти и их модификации, значения непосредственных операндов и т.д.




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