⟩RESOLVE
>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 ;
Советская реализация
Описание и определение слова >RESOLVE в ядре ФОРТ-ЕС:
>RESOLVE К А-> РАЗРЕШИТЬ ССЫЛКУ ВПЕРЕД В АДРЕСЕ А 19 Экран номер 19 ( 31.03.86 СРАВНЕНИЯ И РАЗРЕШЕНИЯ В ШИТОМ КОДЕ) : >RESOLVE ( A->) HERE SWAP ! ;
Ссылки
- Исходный текст слова >RESOLVE в Каллисто Классик 1.0
- См. слова <MARK, <RESOLVE и >MARK
- См. также слова BRANCH и ?BRANCH
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |