⟩RESOLVE: различия между версиями

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Нет описания правки
 
(не показано 25 промежуточных версий этого же участника)
Строка 1: Строка 1:
'''>RESOLVE''' — стандартное слово [[Каллисто]].
'''>RESOLVE''' (разрешить) фортовское слово [[Каллисто]]. Завершить компиляцию перехода вперёд.
>RESOLVE      ( a −− )                            Разрешить ссылку вперёд в адресе a.


Разрешить ссылку вперёд в адресе a.
Слово >RESOLVE снимает со [[Стек данных|стека]] [[Единое адресное пространство|адрес]], занесённый туда словом [[⟩MARK|>MARK]], и вписывает по этому адресу ссылку на текущую вершину [[Словарь|словаря]] в соответствии с требованиями [[BRANCH]] и [[?BRANCH]].


== Ввод слова >RESOLVE ==
В [[Режим NUM|режиме NUM]] последовательно нажмите клавиши [[Клавиша F|{{Оранжевая клавиша|F}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]]   [[Клавиша Р-ГРД-Г|{{Чёрная клавиша|Р-ГРД-Г}}]] [[Клавиша ×|{{Серая клавиша|×}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша 1|{{Серая клавиша|1}}]] [[Клавиша 5|{{Серая клавиша|5}}]] [[Клавиша -|{{Серая клавиша|−}}]] [[Клавиша ↔|{{Серая клавиша|↔}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]]
Для возврата в [[режим NUM]] нажмите [[Клавиша P|синюю клавишу {{Синяя клавиша|P}}]].


== >RESOLVE в предыдущем стандарте Forth-83 (англ.) ==
== >RESOLVE в предыдущем стандарте Forth-83 (англ.) ==
Строка 10: Строка 15:
           using addr and places this branch address into the space
           using addr and places this branch address into the space
           left by >MARK .
           left by >MARK .
== Реализация ==
<pre>
3636 ;#FwdRESOLVE
3637 ; >RESOLVE        ( a −− )                            Разрешить ссылку вперёд в адресе a.
3638 LGRESOLVE:      .DB    8
3639                .TEXT  ">RESOLVE"
3640                .DW    LGMARK
3641 GRESOLVE:      .DW CALL
3642 RGRESOLVE:      .DW HERE, LITP
3643                .DB 39,17                      ; 10001
3644                .DW SUB, SWAP, STORE, EXIT
</pre>
=== Реализации в SP-Forth 4.20 ===
<pre>
: >RESOLVE1 ( A -> )
  HERE OVER - 4 -
  SWAP !
;
: >RESOLVE ( A, N -- )
  DUP 1 = IF  DROP >RESOLVE1
          ELSE 2 <> IF -2007 THROW THEN \ ABORT" Conditionals not paired"
              >RESOLVE1
          THEN
;
</pre>
<pre>
: TC>RESOLVE1 ( A -> )
  DUP
    DP @ DUP TO :-SET
    OVER - 4 -
    SWAP !
\  J_OPT? IF ." R=" BASE @ HEX LAST-HERE U. DP @ U. BASE ! THEN
RESOLVE_OPT
;
: TC>RESOLVE ( A, N -- )
  DUP 1 = IF  DROP TC>RESOLVE1
          ELSE 2 <> IF -2007 THROW THEN \ ABORT" Conditionals not paired"
              TC>RESOLVE1
          THEN
;
</pre>
<pre>
: >ORESOLVE1 ( A -> )
  ?SET
  DUP
    DP @ DUP TO :-SET
    OVER - 4 -
    SWAP !
  RESOLVE_OPT
;
: >ORESOLVE ( A, N -- )
  DUP 1 = IF  DROP >ORESOLVE1
          ELSE 2 <> IF -2007 THROW THEN \ ABORT" Conditionals not paired"
              >ORESOLVE1
          THEN
;
</pre>
=== Советская реализация ===
Описание и определение слова &gt;RESOLVE в ядре ФОРТ-ЕС:
<PRE>
>RESOLVE К А-> РАЗРЕШИТЬ ССЫЛКУ ВПЕРЕД В АДРЕСЕ А              19
                    Экран номер 19
( 31.03.86  СРАВНЕНИЯ И РАЗРЕШЕНИЯ В ШИТОМ КОДЕ)
: >RESOLVE ( A->) HERE SWAP ! ;
</PRE>
== Ссылки ==
* {{Исходник|FwdRESOLVE|&gt;RESOLVE}}
* См. слова [[⟨MARK|&lt;MARK]], [[⟨RESOLVE|&lt;RESOLVE]] и [[⟩MARK|&gt;MARK]]
* См. также слова [[BRANCH]] и [[?BRANCH]]




Строка 15: Строка 99:
{{заготовка}}
{{заготовка}}
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто]]
[[Категория:Слова высокого уровня]]
[[Категория:Реализация структур управления Каллисто]]
[[Категория:Реализация структур управления Каллисто]]
[[Категория:Фортовские слова]]

Текущая версия от 22:45, 6 марта 2019

>RESOLVE (разрешить) — фортовское слово Каллисто. Завершить компиляцию перехода вперёд.

>RESOLVE       ( a −− )                             Разрешить ссылку вперёд в адресе a.

Слово >RESOLVE снимает со стека адрес, занесённый туда словом >MARK, и вписывает по этому адресу ссылку на текущую вершину словаря в соответствии с требованиями BRANCH и ?BRANCH.

Ввод слова >RESOLVE[править]

В режиме NUM последовательно нажмите клавиши  F   ИП     Р-ГРД-Г   ×   ИП   1   5         ИП 

Для возврата в режим NUM нажмите синюю клавишу  P .

>RESOLVE в предыдущем стандарте Forth-83 (англ.)[править]

     >RESOLVE     addr --                       C,83 "forward-resolve"
          Used at the destination of a forward branch.  Calculates the
          branch address (to the current location in the dictionary)
          using addr and places this branch address into the space
          left by >MARK .

Реализация[править]

3636 ;#FwdRESOLVE
3637 ; >RESOLVE         ( a −− )                             Разрешить ссылку вперёд в адресе a.
3638 LGRESOLVE:      .DB     8
3639                 .TEXT   ">RESOLVE"
3640                 .DW     LGMARK
3641 GRESOLVE:       .DW CALL
3642 RGRESOLVE:      .DW HERE, LITP
3643                 .DB 39,17                       ; 10001
3644                 .DW SUB, SWAP, STORE, EXIT

Реализации в SP-Forth 4.20[править]

: >RESOLVE1 ( A -> )
  HERE OVER - 4 -
  SWAP !
;

: >RESOLVE ( A, N -- )
  DUP 1 = IF   DROP >RESOLVE1
          ELSE 2 <> IF -2007 THROW THEN \ ABORT" Conditionals not paired"
               >RESOLVE1
          THEN
;
: TC>RESOLVE1 ( A -> )
  DUP
    DP @ DUP TO :-SET
    OVER - 4 -
    SWAP !
\   J_OPT? IF ." R=" BASE @ HEX LAST-HERE U. DP @ U. BASE ! THEN
 RESOLVE_OPT

;

: TC>RESOLVE ( A, N -- )
  DUP 1 = IF   DROP TC>RESOLVE1
          ELSE 2 <> IF -2007 THROW THEN \ ABORT" Conditionals not paired"
               TC>RESOLVE1
          THEN
;
: >ORESOLVE1 ( A -> )
  ?SET
  DUP
    DP @ DUP TO :-SET
    OVER - 4 -
    SWAP !
  RESOLVE_OPT
;

: >ORESOLVE ( A, N -- )
  DUP 1 = IF   DROP >ORESOLVE1
          ELSE 2 <> IF -2007 THROW THEN \ ABORT" Conditionals not paired"
               >ORESOLVE1
          THEN
;

Советская реализация[править]

Описание и определение слова >RESOLVE в ядре ФОРТ-ЕС:

>RESOLVE К А-> РАЗРЕШИТЬ ССЫЛКУ ВПЕРЕД В АДРЕСЕ А               19

                     Экран номер 19
( 31.03.86   СРАВНЕНИЯ И РАЗРЕШЕНИЯ В ШИТОМ КОДЕ)

: >RESOLVE ( A->) HERE SWAP ! ;

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


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


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