⟩MARK: различия между версиями
AtH (обсуждение | вклад) Нет описания правки |
AtH (обсуждение | вклад) Нет описания правки |
||
Строка 3: | Строка 3: | ||
Слово >MARK резервирует место в [[Словарь|словаре]] под адрес ссылки вперёд в [[Шитый код|шитом коде]] и оставляет [[Единое адресное пространство|адрес]] этого зарезервированного места на [[Стек данных|стеке]]. Адрес назначения ссылки неопределён, пока слово [[⟩RESOLVE|>RESOLVE]] не разместит в зарезервированном месте правильный адрес перехода, завершив создание ссылки. | Слово >MARK резервирует место в [[Словарь|словаре]] под адрес ссылки вперёд в [[Шитый код|шитом коде]] и оставляет [[Единое адресное пространство|адрес]] этого зарезервированного места на [[Стек данных|стеке]]. Адрес назначения ссылки неопределён, пока слово [[⟩RESOLVE|>RESOLVE]] не разместит в зарезервированном месте правильный адрес перехода, завершив создание ссылки. | ||
Обычно >MARK и [[⟩RESOLVE|>RESOLVE]] используются в паре для компиляции адреса | Обычно >MARK и [[⟩RESOLVE|>RESOLVE]] используются в паре для компиляции адреса переходов вперёд: [[BRANCH]] и [[?BRANCH]]. | ||
== Ввод слова >MARK == | == Ввод слова >MARK == |
Версия от 22:14, 6 марта 2019
>MARK (отметить) — фортовское слово Каллисто. Начать компиляцию адреса перехода вперёд.
>MARK ( −− a ) Отметить текущий адрес для ссылки вперёд.
Слово >MARK резервирует место в словаре под адрес ссылки вперёд в шитом коде и оставляет адрес этого зарезервированного места на стеке. Адрес назначения ссылки неопределён, пока слово >RESOLVE не разместит в зарезервированном месте правильный адрес перехода, завершив создание ссылки.
Обычно >MARK и >RESOLVE используются в паре для компиляции адреса переходов вперёд: BRANCH и ?BRANCH.
Ввод слова >MARK
В режиме NUM последовательно нажмите клавиши F ИП Р-ГРД-Г ÷ ШГ← × 9
Для возврата в режим NUM нажмите синюю клавишу P .
AHEAD в стандарте ANS Forth
Слово AHEAD в Форте ANS начинает компиляцию безусловного перехода вперёд.
15.6.2.0702 AHEAD TOOLS EXT Интерпретация: Семантика интерпретации для этого слова не определена. Компиляция: ( C: -- orig ) Помещает адрес ячейки новой неразрешенной ссылки вперед orig на стек потока управления. Добавляет семантику времени-выполнения, данную ниже к текущему определению. Семантика не завершена, пока orig не разрешена (например, с помощью THEN). Время-выполнения: ( -- ) Продолжает выполнение с адреса ячейки, определенного разрешением orig.
История
>MARK в предыдущем стандарте Forth-83 (англ.)
>MARK -- addr C,83 "forward-mark" Used at the source of a forward branch. Typically used after either BRANCH or ?BRANCH . Compiles space in the dictionary for a branch address which will later be resolved by >RESOLVE .
Реализация
3629 ;#FwdMARK 3630 ; >MARK ( −− a ) Отметить текущий адрес для ссылки вперёд. 3631 LGMARK: .DB 5 3632 .TEXT ">MARK" 3633 .DW LBTICK 3634 GMARK: .DW CALL, HERE, ZERO, BRAN,RCOMMA
Реализация из SP-Forth 4.20:
: AHEAD \ 94 TOOLS EXT \ Интерпретация: семантика неопределена. \ Компиляция: ( C: -- orig ) \ Положить место неразрешенной ссылки вперед orig на стек управления. \ Добавить семантику времени выполнения, данную ниже, к текущему определению. \ Семантика незавершена до тех пор, пока orig не разрешится (например, \ по THEN). \ Время выполнения: ( -- ) \ Продолжить выполнение с позиции, заданной разрешением orig. HERE BRANCH, >MARK 2 ; IMMEDIATE … : >MARK ( -> A ) DP @ DUP TO :-SET 4 - ;
Советская реализация
Описание и определение слова >MARK в ядре ФОРТ-ЕС:
>MARK К ->А ОТМЕТИТЬ ТЕКУЩИЙ АДРЕС ДЛЯ ССЫЛКИ ВПЕРЕД 19 Экран номер 19 ( 31.03.86 СРАВНЕНИЯ И РАЗРЕШЕНИЯ В ШИТОМ КОДЕ) : >MARK ( ->A) HERE 0 , ;
Ссылки
- Исходный текст слова >MARK в Каллисто Классик 1.0
- См. слова <MARK, <RESOLVE и >RESOLVE
- См. также слова BRANCH и ?BRANCH
- Слово AHEAD в стандарте ANS Forth (англ.)
- Слово AHEAD в черновике Forth 200x (англ.)
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |