Редактирование: Адресный интерпретатор
Перейти к навигации
Перейти к поиску
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий ниже, чтобы убедиться, что это нужная вам правка, и запишите страницу ниже, чтобы отменить правку.
Текущая версия | Ваш текст | ||
Строка 1: | Строка 1: | ||
'''Адресный интерпретатор''' (''англ.'' address interpreter) — интерпретатор [[Шитый код|косвенного шитого кода]]. | '''Адресный интерпретатор''' (''англ.'' address interpreter) — интерпретатор [[Шитый код|косвенного шитого кода]]. | ||
''Адресный интерпретатор'' [[Каллисто|Каллисто 1.0]] использует [[единое адресное пространство]], что позволяет исполнять [[шитый код]] как из [[Регистры байтовых данных|байтовой памяти]], так и из [[Память программ|памяти программ]]. | |||
'' | Если поток исполнения команд уподобить току крови, ''адресный интерпретатор'' — сердце [[Каллисто]]. Каждая передача управления от одного [[примитив]]а к другому проходит через ''адресный интерпретатор''. Именно он «гонит кровь» через [[Слово :|определения высокого уровня]], «оживляя» [[шитый код]] и заставляя его [[EXECUTE|работать]]. | ||
К сожалению, сейчас (по состоянию на | К сожалению, сейчас (по состоянию на июнь 2016 года) ''адресный интерпретатор'' написан на [[ЯМК|языке МК]], что сильно ограничивает быстродействие [[Каллисто]]. Оптимизация ''адресного интерпретатора'' по быстродействию, как и прошивка его в ПЗУ [[микроконтроллер]]а является задачей, важной для успеха [[Каллисто]]. | ||
== История == | == История == | ||
Строка 15: | Строка 15: | ||
== Реализация == | == Реализация == | ||
В [[Каллисто|Каллисто 1.0]] адресный интерпретатор способен исполнять [[шитый код]] как из [[Регистры байтовых данных|памяти данных]], так и из [[Память программ|памяти программ]] [[МК-161|«Электроники МК-161»]] | В [[Каллисто|Каллисто 1.0]] адресный интерпретатор способен исполнять [[шитый код]] как из [[Регистры байтовых данных|памяти данных]], так и из [[Память программ|памяти программ]] [[МК-161|«Электроники МК-161»]]. | ||
=== NEXT === | === NEXT === | ||
Действие NEXT — | Действие NEXT — основное в адресном интерпретаторе, передача управления от одного токена в цепочке [[шитый код|шитого кода]] к следующему. Каллистянские [[примитив]]ы обычно завершают свою работу исполнением NEXT. Адрес точки NEXT хранится в [[R9]]. Содержимое [[R9]] различно и зависит от того, идёт исполнение шитого кода из [[Регистры байтовых данных|памяти данных]] или [[Память программ|памяти программ]]. В этих двух случаях адрес NEXT равен NEXTD и NEXTP соответственно. | ||
Действие NEXT не следует путать с каллистянским словом [[NEXT]]. | Действие NEXT не следует путать с каллистянским словом [[NEXT]]. | ||
Строка 40: | Строка 34: | ||
2503 NEXTPP: RM7 KPRGM RME ∗ RM7 1 + KPRGM + ; Считать MEMW[W], это должно быть CFA очередного слова в шитом коде | 2503 NEXTPP: RM7 KPRGM RME ∗ RM7 1 + KPRGM + ; Считать MEMW[W], это должно быть CFA очередного слова в шитом коде | ||
2504 M8 KGOTO8 ; передать управление на адрес, записанный в CFA | 2504 M8 KGOTO8 ; передать управление на адрес, записанный в CFA | ||
</pre> | </pre> | ||
=== EXECUTE === | === EXECUTE === | ||
Слово [[EXECUTE]] считывает из [[Стек данных|стека]] [[CFA|токен]], после чего передаёт управление на его обработчик. | Слово [[EXECUTE]] считывает из [[Стек данных|стека]] [[CFA|токен]], после чего передаёт управление на его обработчик. Эту работу выполняет код, начиная с метки DOEXECRX — см. его выше, в описании NEXT. | ||
<pre> | <pre> | ||
2506 JEXEC: ; Обработчик EXECUTE | 2506 JEXEC: ; Обработчик EXECUTE | ||
Строка 52: | Строка 45: | ||
=== CALL / RETURN === | === CALL / RETURN === | ||
Действие CALL / RETURN позволяют адресному интерпретатору исполнять не только последовательность примитивов, но также использовать в [[шитый код|шитом коде]] слова высокого уровня — образуя своего рода вложенность. Этим двум действиям соответствуют каллистянские слова [[Слово :|:]] и [[EXIT]]. | |||
<pre> | <pre> | ||
2467 CALLD: ;∗∗ CALL, когда управление передаётся в память данных | 2467 CALLD: ;∗∗ CALL, когда управление передаётся в память данных | ||
Строка 87: | Строка 78: | ||
2499 NEXTP: ; NEXT для шитого кода из памяти программ. | 2499 NEXTP: ; NEXT для шитого кода из памяти программ. | ||
… | … | ||
</pre> | </pre> | ||