Форт

Oct 30, 2016 15:28

WORD: setmodule
HERE - адрес поля имени
HEADER - заголовок с полем связи
HERE - поле кода
CELL+ DUP >R - прячем адрес первой ячейки поля парметров, сюда будет сохранен адрес модуля
CELL+ , - плюс 2 ячейки это адрес исполняющей части слова

1+ (SetModule) - адрес поля имени был положен выше, откусываем счетчик и получаем адрес прилинкованного модуля
R> ! - пишем адрес

Заметка: использование >R R> уже плохо. Можно ли избавиться?
Сперва получим адрес, а потом уже будем формировать исполняющую часть

WORD: setmodule
HERE 1+ HEADER (SetModule)
HERE 0 , - временное поле кода
HERE SWAP! - сохраним адрес
не выходит.
Попробуем декомпозировать.

Отдельно получение и сохранение адреса, отдельно - создание поля кода.

WORD: procAddress ( на входе - адрес поля имени. его надо скомпилировать в первую ячейку поля параметров )
1+ (SetModule) , ;WORD

WORD: fillCfa ( на входе - адрес поля имени )

N>LINK CELL+ DUP CELL+ CELL+ SWAP! ;WORD

WORD: NAME> N>LINK CELL+ ;WORD

игого:
WORD: setmodule HERE DUP HEADER procAddress fillCfa

( Далее компилируем низкоуровнгевый код )

1_int invoke ;WORD

Заново:

WORD: setmodule
HERE
HEADER HERE 0 , SWAP
1+ (SetModule) ,
HERE SWAP!
1_int invoke ;WORD
Previous post Next post
Up