Редактирование: Адресный интерпретатор
Перейти к навигации
Перейти к поиску
Правка может быть отменена. Пожалуйста, просмотрите сравнение версий ниже, чтобы убедиться, что это нужная вам правка, и запишите страницу ниже, чтобы отменить правку.
Текущая версия | Ваш текст | ||
Строка 15: | Строка 15: | ||
== Реализация == | == Реализация == | ||
В [[Каллисто|Каллисто 1.0]] адресный интерпретатор способен исполнять [[шитый код]] как из [[Регистры байтовых данных|памяти данных]], так и из [[Память программ|памяти программ]] [[МК-161|«Электроники МК-161»]]. Прежде, чем принять компактную | В [[Каллисто|Каллисто 1.0]] адресный интерпретатор способен исполнять [[шитый код]] как из [[Регистры байтовых данных|памяти данных]], так и из [[Память программ|памяти программ]] [[МК-161|«Электроники МК-161»]]. Прежде, чем принять данную компактную форму, он прошёл через множество эволюций и представляет собой произведение искусства. | ||
В Каллисто-2 адресный интерпретатор существенно упростится, а его работа ускорится, т.к. для работоспособности транслятора достаточно уметь исполнять [[шитый код]] из [[Регистры байтовых данных|памяти данных]] | В Каллисто-2 адресный интерпретатор существенно упростится, а его работа ускорится, т.к. для работоспособности транслятора достаточно уметь исполнять [[шитый код]] из [[Регистры байтовых данных|памяти данных]]. | ||
=== NEXT === | === NEXT === | ||
Действие NEXT — основа адресного интерпретатора, передача управления от одного [[токен]]а в цепочке [[шитый код|шитого кода]] к следующему. Каллистянские [[примитив]]ы обычно завершаются командой [[КБП9]], так как | Действие NEXT — основа адресного интерпретатора, передача управления от одного [[токен]]а в цепочке [[шитый код|шитого кода]] к следующему. Каллистянские [[примитив]]ы обычно завершаются командой [[КБП9]], так как адрес NEXT хранится в [[R9]]. Содержимое [[R9]] различно и зависит от того, идёт исполнение [[Шитый код|шитого кода]] из [[Регистры байтовых данных|памяти данных]] или [[Память программ|памяти программ]]. В этих двух случаях адрес NEXT равен NEXTD и NEXTP соответственно. | ||
[[RE|Регистр E]] содержит число 256. | [[RE|Регистр E]] содержит число 256. Токен очередного слова W считывается в [[RE|регистр 7]]. Он выглядит, как вспомогательный, но на самом деле содержимое [[R7]] повторно используется в подпрограммах RPUSHRIP / RPUSHRID. Обращение к ним происходит из CALL с помощью команды [[КППС]], но об этом чуть позже. | ||
Действие NEXT не следует путать с каллистянским словом [[NEXT]]. | Действие NEXT не следует путать с каллистянским словом [[NEXT]]. | ||
Строка 44: | Строка 42: | ||
=== EXECUTE === | === EXECUTE === | ||
Слово [[EXECUTE]] считывает из [[Стек данных|стека]] [[CFA|токен]], после чего передаёт управление на его обработчик. Основную работу выполняет код, начиная с метки DOEXECRX — он | Слово [[EXECUTE]] считывает из [[Стек данных|стека]] [[CFA|токен]], после чего передаёт управление на его обработчик. Основную работу выполняет код, начиная с метки DOEXECRX — он приводится выше в описании NEXT. | ||
<pre> | <pre> | ||
2506 JEXEC: ; Обработчик EXECUTE | 2506 JEXEC: ; Обработчик EXECUTE | ||
Строка 54: | Строка 52: | ||
Действия 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, когда управление передаётся в память данных |