Редактирование: Адресный интерпретатор
Перейти к навигации
Перейти к поиску
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий ниже, чтобы убедиться, что это нужная вам правка, и запишите страницу ниже, чтобы отменить правку.
Текущая версия | Ваш текст | ||
Строка 1: | Строка 1: | ||
'''Адресный интерпретатор''' (''англ.'' address interpreter) — интерпретатор [[Шитый код|косвенного шитого кода]]. | '''Адресный интерпретатор''' (''англ.'' address interpreter) — интерпретатор [[Шитый код|косвенного шитого кода]]. | ||
Если поток исполнения команд уподобить току крови, | Если поток исполнения команд уподобить току крови, ''адресный интерпретатор'' — сердце [[Каллисто]]. Каждая передача управления от одного [[примитив]]а к другому проходит через ''адресный интерпретатор''. Именно он «гонит кровь» через [[Слово :|определения высокого уровня]], «оживляя» [[шитый код]] и заставляя его [[EXECUTE|работать]]. | ||
''Адресный интерпретатор'' [[Каллисто|Каллисто 1.0]] использует [[единое адресное пространство]], что позволяет исполнять [[шитый код]] как из [[Регистры байтовых данных|байтовой памяти]], так и из [[Память программ|памяти программ]]. Такой подход делает его в несколько раз сложней и медленней, чем принято в Форте. В Каллисто-2 планируется упростить адресный интерпретатор, запретив [[шитый код]] в [[Память программ|памяти программ]]. | ''Адресный интерпретатор'' [[Каллисто|Каллисто 1.0]] использует [[единое адресное пространство]], что позволяет исполнять [[шитый код]] как из [[Регистры байтовых данных|байтовой памяти]], так и из [[Память программ|памяти программ]]. Такой подход делает его в несколько раз сложней и медленней, чем принято в Форте. В Каллисто-2 планируется упростить адресный интерпретатор, запретив [[шитый код]] в [[Память программ|памяти программ]]. | ||
Строка 24: | Строка 24: | ||
[[RE|Регистр E]] содержит число 256. [[Токен]] очередного слова W считывается из [[Шитый код|шитого кода]] в [[R7|регистр 7]]. Регистр выглядит, как вспомогательный, но на самом деле содержимое [[R7]] повторно используется в подпрограммах RPUSHRIP / RPUSHRID. Обращение к ним происходит из CALL с помощью команды [[КППС]], но об этом чуть позже. | [[RE|Регистр E]] содержит число 256. [[Токен]] очередного слова W считывается из [[Шитый код|шитого кода]] в [[R7|регистр 7]]. Регистр выглядит, как вспомогательный, но на самом деле содержимое [[R7]] повторно используется в подпрограммах RPUSHRIP / RPUSHRID. Обращение к ним происходит из CALL с помощью команды [[КППС]], но об этом чуть позже. | ||
[[Токен]] W указывает на [[поле кода]] слова, в котором содержится адрес обработчика этого слова. Этот адрес считывается в R8 и команда [[КБП8]] передаёт управление на обработчик. Обработчик всегда написан на [[ЯМК|языке МК]] и содержится в [[Память программ|памяти программ]], но W может указывать как на [[Регистры байтовых данных|память данных]], так и на [[Память программ|память программ]]. | |||
Действие NEXT не следует путать с каллистянским словом [[NEXT]]. | Действие NEXT не следует путать с каллистянским словом [[NEXT]]. | ||
Строка 44: | Строка 44: | ||
=== EXECUTE === | === EXECUTE === | ||
Слово [[EXECUTE]] считывает из [[Стек данных|стека]] [[CFA|токен]], после чего передаёт управление на его обработчик. Основную работу выполняет код, начиная с метки DOEXECRX — он | Слово [[EXECUTE]] считывает из [[Стек данных|стека]] [[CFA|токен]], после чего передаёт управление на его обработчик. Основную работу выполняет код, начиная с метки DOEXECRX — он приводится выше в описании NEXT. | ||
<pre> | <pre> | ||
2506 JEXEC: ; Обработчик EXECUTE | 2506 JEXEC: ; Обработчик EXECUTE | ||
Строка 54: | Строка 54: | ||
Действия CALL и RETURN позволяют адресному интерпретатору исполнять не только последовательность [[примитив]]ов, но также использовать в [[шитый код|шитом коде]] слова высокого уровня — обеспечивая вложенность определений «через двоеточие». Этим двум действиям соответствуют каллистянские слова [[Слово :|:]] и [[EXIT]]. | Действия CALL и RETURN позволяют адресному интерпретатору исполнять не только последовательность [[примитив]]ов, но также использовать в [[шитый код|шитом коде]] слова высокого уровня — обеспечивая вложенность определений «через двоеточие». Этим двум действиям соответствуют каллистянские слова [[Слово :|:]] и [[EXIT]]. | ||
Сохранив в [[Стек возвратов Каллисто|стеке возвратов]] текущую позицию [[Шитый код|шитого кода]] (или считав её оттуда), действия CALL / RETURN передают управление на точки NEXTD / NEXTP (см. выше). Действие CALL в [[Каллисто|Каллисто 1.0]] реализовано дважды, начиная с меток CALLD и CALL. Это обработчики высокоуровневых слов в [[Регистры байтовых данных|памяти данных]] | Сохранив в [[Стек возвратов Каллисто|стеке возвратов]] текущую позицию [[Шитый код|шитого кода]] (или считав её оттуда), действия CALL / RETURN передают управление на точки NEXTD / NEXTP (см. выше). Действие CALL в [[Каллисто|Каллисто 1.0]] реализовано дважды, начиная с меток CALLD и CALL. Это обработчики высокоуровневых слов в [[Регистры байтовых данных|памяти данных]] и [[Память программ|памяти программ]] соответственно: | ||
<pre> | <pre> | ||
2467 CALLD: ;∗∗ CALL, когда управление передаётся в память данных | 2467 CALLD: ;∗∗ CALL, когда управление передаётся в память данных |