Поле кода

Материал из ПМК вики
Версия от 05:16, 21 июня 2016; AtH (обсуждение | вклад)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску

Поле кода (англ. Code Field) обычно занимает 2 байта и содержит адрес обработчика — программы (кода на языке МК-161), которая и выполняет действие, связанное с данным словом. Точка NEXT адресного интерпретатора обеспечивает обработчику доступ к полю параметров исполняемой словарной статьи.

Говорят, что обработчик слова интерпретирует его поле параметров. Поле кода статьи выбирает интерпретатор, нужный для обработки поля параметров этой статьи.

Важным примером такого интерпретатора является адресный интерпретатор, и тогда поле параметров содержит последовательность интерпретируемых адресов в шитом коде. Так устроены словарные статьи слов, определённых через двоеточие. Эти статьи содержат в поле кода адрес точки CALL адресного интерпретатора.

Другие порождающие слова задают другие интерпретаторы и соответственно другие структуры поля параметров. Адрес поля кода совпадает с адресом тела словарной статьи. Он называется CFA (от англ. Code Field Address) или токеном.

Особые случаи поля кода[править]

Поле кода примитива содержит адрес его поля данных (PFA=CFA+2), так как именно в поле данных примитива содержится его обработчик. В Каллисто 1.0 бывают отступления от этого правила, когда ради оптимизации памяти обработчик примитива размещён в более удобном месте. В этом случае поле данных примитива пустует.

Поле кода слова, созданного с помощью механизма <BUILDSDOES> содержит две ячейки и позволяет интерпретировать поле данных обработчиком, написанным на Каллисто.

При векторном поле кода часть поля параметров используется в качестве указателей на код альтернативных действий, связанных с тем же словом. В Каллисто векторное поле кода используется порождающими словами VALUE и DEFER, а второе действие, связанное с порождёнными словами, компилирует или осуществляет слово TO.

Устройство словарной статьи Каллисто
заголовок (header) тело (body)
NFA LFA CFA (xt) PFA
Поле имени Поле связи Поле кода Поле данных (параметров)


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


  Это заготовка статьи. Вы можете помочь проекту, дополнив её.