⟩MARK

Материал из ПМК вики
Версия от 22:46, 6 марта 2019; AtH (обсуждение | вклад) (→‎Реализация)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску

>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 , ;

Ссылки[править]


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


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