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

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Нет описания правки
 
(не показано 35 промежуточных версий этого же участника)
Строка 1: Строка 1:
'''CREATE''' (создать) — стандартное слово [[Каллисто]].
'''CREATE''' (создать) — стандартное слово [[Каллисто]].
 
CREATE        ( −− )                              Создать начало статьи (до PFA) для следующего слова.
Формирует слово с именем XXX (заголовок и [[CFA]]), оставляя его поле параметров пустым.
Фраза CREATE XXX формирует слово с именем XXX (заголовок и [[CFA]]), оставляя его [[поле параметров]] пустым. При исполнении такое слово кладёт на [[Стек данных|стек]] [[PFA|адрес своего поля данных]].


== Ввод слова CREATE ==
== Ввод слова CREATE ==
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша С/П|{{Чёрная клавиша|С/П}}]] [[Клавиша ×|{{Серая клавиша|×}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша ШГ влево|{{Чёрная клавиша|ШГ←}}]] [[Клавиша 2|{{Серая клавиша|2}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]]
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша С/П|{{Чёрная клавиша|С/П}}]] [[Клавиша ×|{{Серая клавиша|×}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] {{ШГ←}} [[Клавиша 2|{{Серая клавиша|2}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]]


== CREATE в стандарте ANS Forth ==
== CREATE в стандарте ANS Forth ==
<pre>
  6.1.1000  CREATE                                                          CORE
  6.1.1000  CREATE                                                          CORE
             ( "<spaces>name" -- )
             ( "<spaces>name" -- )
Строка 29: Строка 30:
  Типичное использование:
  Типичное использование:
         ... CREATE SOMETHING ...
         ... CREATE SOMETHING ...
</pre>
== История ==
Слово присутствует в Форте−79 и последующих, но имеет небольшие отличия из−за принятия на себя функций <BUILDS
В 1968 году Чак Мур работал в Mohasco Industries, Inc ([https://en.wikipedia.org/wiki/Amsterdam_%28city%29,_New_York Amsterdam NY], ''англ.''). Первая версия интерпретатора, получившая название FORTH, заработала на миникомпьютере IBM 1130 с графическим дисплеем 2250 (16-битный процессор с ОЗУ 8К, дисководом, клавиатурой, принтером и ридером/панчером перфокарт). Первый FORTH знал слово CREATE под именем ENTER
CREATE создавал классическую [[Словарная статья|словарную статью]]:
    ссылка на предыдущую запись
    счётчик и 3 символа
    код для выполнения
    параметры
[[Поле кода]] было важной инновацией, так как косвенный переход был единственным накладным расходом, как только слово было найдено. Про ценность счётчика для различения слов Чак Мур узнал от писателей компиляторов из Стэнфорда.


В 1970 году Чак Мур, создатель Форта, называл слова, кладущие на стек значение или адрес своего [[поле данных|поля данных]] «существительными» (''англ.'' noun).


== CREATE в предыдущем стандарте Forth-83 (англ.) ==
Если CREATE используется, как часть современной конструкции CREATE…[[DOES⟩|DOES&gt;]] — в большинстве случаев при переносе такого определения слова на Каллисто достаточно просто заменить слово CREATE на [[⟨BUILDS|слово &lt;BUILDS]]
 
Английское слово [http://www.lingvo-online.ru/ru/Translate/en-ru/create create] означает «создать».
 
=== CREATE в предыдущем стандарте Forth-83 (англ.) ===
       CREATE      --                            M,79
       CREATE      --                            M,79
           A defining word executed in the form:
           A defining word executed in the form:
Строка 42: Строка 62:
           not allocate space in <name>'s parameter field.
           not allocate space in <name>'s parameter field.


 
=== CREATE в стандарте Forth-79 (англ.) ===
== CREATE в стандарте Forth-79 (англ.) ==
  CREATE                                      239
  CREATE                                      239
     A defining word used in the form:
     A defining word used in the form:
Строка 52: Строка 71:
     field is left on the stack.
     field is left on the stack.


 
=== CREATE в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
== CREATE в fig-FORTH Release 1 glossary, май 1979 (англ.) ==
  CREATE
  CREATE
         A defining word used in the form:
         A defining word used in the form:
Строка 61: Строка 79:
         parameter field. The new word is created in the CURRENT vocabulary.
         parameter field. The new word is created in the CURRENT vocabulary.


== Реализация ==
Создающая часть слова CREATE является высокоуровневой. Для ускорения исполнения создаваемых слов исполняющая часть слова CREATE написана на [[ЯМК|языке МК]].
<pre>
3310 ;#CREATE
3311 ; CREATE          ( −− )                              Создать начало статьи (до PFA) для следующего слова.
3312 ; Сформировать слово с именем XXX (заголовок и CFA), оставив его поле параметров пустым.
3313 ; При обращении к XXX на стек кладётся его адрес.
3314 ; Длина имени слова ограничивается 31 литерой
3315 ; Слово присутствует в Форте−79 и последующих, но имеет небольшие отличия из−за принятия на себя функций <BUILDS
3316 LCREAT:        .DB    6
3317                .TEXT  "CREATE"                ; ( "<пр>имя" −− )
3318                .DW    LIDDOT
3319 CREAT:          .DW CALL, BL,WORD, FIND, ZBRAN,CRE
3320                .DW DROP,IDDOT,LITB            ; Наш FIND возвращает NFA
3321                .DB 4
3322                .DW MESS                        ; Сообщение, что такое слово уже есть
3323 CRE:            .DW HERE, DUP,CAT, LITB
3324                .DB 31
3325                .DW MIN                        ; Обрезать длину по 31 литеру
3326                .DW DUP, CCOM                  ; биты SMUDGE и IMMEDIATE сброшены
3327                .DW ALLOT                      ; Оставить слово как поле имени
3328                .DW LATES, COMMA                ; NFA прошлого слова в поле связи
3329                .DW CURR,UAT, STORE            ; Сделать слово последним в словаре CURRENT @
3330                .DW LITP,SCRE, BRAN,RCOMMA      ; CFA: созданное слово кладёт на стек свой PFA
3331 SCRE:          RM7 10002 + KM3  KGOTO9        ; Созданные слова размещаются в области двоичных данных
</pre>
Реализации из SP-Forth 4.20:
<pre>
0 VALUE CREATE-CODE
CODE _CREATE-CODE
    LEA  EBP, -4 [EBP]
    MOV  [EBP], EAX
    POP EAX
    RET
END-CODE


== Реализация CREATE ==
' _CREATE-CODE TO CREATE-CODE
Юрий Семёнов приводит следующее описание слова CREATE (стр. 139):
    '  _CREATE-CODE  >VIRT VALUE CREATE-CODE
: SHEADER ( addr u -- )
  HERE 0 , ( cfa )
\  DUP LAST-CFA !
  0 C,    ( flags )
  -ROT WARNING @
  IF 2DUP GET-CURRENT SEARCH-WORDLIST
    IF DROP 2DUP TYPE ."  isn't unique" CR THEN
  THEN
  CURRENT @ +SWORD
  ALIGN
  HERE SWAP ! ( заполнили cfa )
;
 
: HEADER
  PARSE-NAME SHEADER
;
: CREATE ( "<spaces>name" -- ) \ 94
  [T] HEADER [I]
  CREATE-CODE COMPILE,
;
</pre>
<pre>
USER LAST-CFA
VECT SHEADER
 
: SHEADER1 ( addr u -- )
  HERE 0 , ( cfa )
  DUP LAST-CFA !
  0 C,    ( flags )
  -ROT WARNING @
  IF 2DUP GET-CURRENT SEARCH-WORDLIST
    IF DROP 2DUP TYPE ."  isn't unique (" SOURCE-NAME TYPE ." )" CR THEN
  THEN
  CURRENT @ +SWORD
 
  ALIGN
  ( сдвигаем указатель кода так, чтобы при компиляции переменных и векторов )
  ( следующая ячейка данных, находящаяся после CALL *-CODE была выровнена:  )
  ALIGN-BYTES @ DUP 4 >
  IF 5 - ALLOT
  ELSE 1 - ALLOT
  THEN
 
  HERE SWAP ! ( заполнили cfa )
;
' SHEADER1 ' SHEADER TC-VECT!
: CREATED ( addr u -- )
\ Создать определение для c-addr u с семантикой выполнения, описанной ниже.
\ Если указатель пространства данных не выровнен, зарезервировать место
\ для выравнивания. Новый указатель пространства данных определяет
\ поле данных name. CREATE не резервирует место в поле данных name.
\ name Выполнение: ( -- a-addr )
\ a-addr - адрес поля данных name. Семантика выполнения name может
\ быть расширена с помощью DOES>.
  SHEADER
 
  HERE DUP LAST-CFA @ !
  DOES>A ! ( для DOES )
  ['] _CREATE-CODE COMPILE,
;
 
: CREATE ( "<spaces>name" -- ) \ 94
  PARSE-NAME CREATED
;
</pre>
 
=== Советская реализация ===
Юрий Семёнов приводит следующее определение слова CREATE (стр. 139):
<PRE>
   : CREATE  FINDN                      ( поиск слова в словаре)
   : CREATE  FINDN                      ( поиск слова в словаре)
             IF                              ( если оно найдено)
             IF                              ( если оно найдено)
Строка 77: Строка 205:
             1+ ALLOT            ( выделение нужного числа байт)
             1+ ALLOT            ( выделение нужного числа байт)
             ?ALIGN    ( выравнивание выделенного числа байт на
             ?ALIGN    ( выравнивание выделенного числа байт на
                           чётную границу, что важно для ЭКВМ типа
                           чётную границу, что важно для ЭВМ типа
                           СМ)
                           СМ)
             ↑ '240 TOGGLE             ( коррекция байта имени)
             ↑ $A0 TOGGLE               ( коррекция байта имени)
             HERE 1- '200 TOGGLE   ( коррекция последнего байта
             HERE 1- $80 TOGGLE     ( коррекция последнего байта
                                       имени)
                                       имени)
             LATEST ,                   ( формирование поля LFA)
             LAST ,                     ( формирование поля LFA)
             CURRENT @ !          ( коррекция значения CURRENT)
             CURRENT @ !          ( коррекция значения CURRENT)
             HERE 2+ , ;                  ( заполнение поля CFA)
             HERE 2+ , ;                  ( заполнение поля CFA)
</PRE>
Описание и определение слова CREATE в ядре ФОРТ-ЕС:
<PRE>
CREATE    -> СОЗДАТЬ НАЧАЛО СТАТЬИ (ДО PFA) ДЛЯ                36
          СЛЕДУЮЩЕГО СЛОВА)
          ЕГО ИСПОЛНЕНИЕ КЛАДЕТ PFA НА СТЕК
CREATE#  A  НАЧАЛО ИСПОЛНИТЕЛЬНОЙ ЧАСТИ "VARIABLE"            3
                      Экран номер 3
(  09.09.86 ДОПОЛНИТЕЛЬНЫЕ ВХОДЫ  В АДРЕСНЫЙ ИНТЕРПРЕТАТОР)


A: CREATE#  RW1 14 LR,            (  ПОМЕСТИТЬ  РFA СТАТЬИ)
M: PUSHRW1  RSTACK  RTWO  SR,    ( ПОМЕСТИТЬ ЗНАЧЕНИЕ ИЗ RW1)
M: PUTRW1    RW1 PUT,  RNEXT BR, (  ЗАМЕНИТЬ  ВЕРХНЕЕ)


== История ==
                    Экран номер 36
Если CREATE используется, как часть конструкции CREATE…[[DOES〉|DOES&gt;]] — в большинстве случаев при переносе такого определения слова на Каллисто достаточно просто заменить [[CREATE]] на [[〈BUILDS|&lt;BUILDS]]
( 09.09.86  CREATE   DOES> )


: CREATE ( ->)  100  ?GAP
ALIGNH -FIND SWAP DROP  IF
  HERE ID. ."  УЖЕ ЕСТЬ "        THEN
  HERE DUP С@ WIDTH AND 2+ ALLOT ALIGNH
  HERE OVER - 2- OVER C! LATEST , CURRENT @ !
  LIT [ CREATE# ] , ;
</PRE>
Определение слова CREATE в FORTH ИТЭФ:
<PRE>
            HEAD    206Q,'CREAT',305Q,GREAT,$COL        ; CREATE
            DW  DFIND,ZBRAN,CRE-$,DROP,TWOP,NFA,IDDOT
            DW  LIT,4,MESS
  CRE:      DW  HERE,DUBL,CAT,$WIDTH,AT,MIN,ONEP,ALLOT
            DW  DUBL,LIT,240Q,TOGL,HERE,ONEM
            DW  LIT,200Q,TOGL,LATES,COMMA,CURR,AT,STORE
            DW  HERE,TWOP,COMMA,SEMI
</PRE>


== Ссылки ==
== Ссылки ==
* {{Исходник|CREATE|CREATE}}
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.1000 CREATE] и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.1.1000 комментарий к нему] в стандарте ANS Forth ''(англ.)''
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.1000 CREATE] и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.1.1000 комментарий к нему] в стандарте ANS Forth ''(англ.)''
* Слово [http://www.forth200x.org/documents/html3/core/CREATE.html CREATE] и [http://www.forth200x.org/documents/html3/rationale.html#rat:core:CREATE комментарий к нему] в черновике Forth 200x ''(англ.)''
* Слово [http://forth-standard.org/standard/core/CREATE CREATE] и [http://forth-standard.org/standard/rationale#rat:core:CREATE комментарий к нему] в черновике Forth 200x ''(англ.)''
* [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\08.PEREMENNYE,%20KONSTANTY%20I%20MASSIWY ПЕРЕМЕННЫЕ, КОНСТАНТЫ И МАССИВЫ] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»]
* [http://www.forth.com/starting-forth/sf8/sf8.html Variables, Constants, and Arrays] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''




Строка 99: Строка 260:
{{заготовка}}
{{заготовка}}
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто без стековых диаграмм]]
[[Категория:Слова высокого уровня]]
[[Категория:Порождающие слова Каллисто]]
[[Категория:Стандартные слова]]
[[Категория:1994 CORE]]
[[Категория:2012 CORE]]

Текущая версия от 21:31, 13 ноября 2017

CREATE (создать) — стандартное слово Каллисто.

CREATE         ( −− )                               Создать начало статьи (до PFA) для следующего слова.

Фраза CREATE XXX формирует слово с именем XXX (заголовок и CFA), оставляя его поле параметров пустым. При исполнении такое слово кладёт на стек адрес своего поля данных.

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

В режиме ЛАТ последовательно нажмите клавиши  С/П   ×   ИП   ШГ←   2   ИП 

CREATE в стандарте ANS Forth[править]

 6.1.1000   CREATE                                                          CORE
            ( "<spaces>name" -- )
            Пропускает ведущие разделители пробелы. Выделяет name, ограниченное 
            пробелом. Создает определение для name с семантикой выполнения, 
            определенной ниже. Если указатель области данных не выровнен, 
            резервирует достаточно области данных для его выравнивания. Новый 
            указатель области данных определяет поле данных name. CREATE не 
            распределяет область данных в поле данных name.

        name Выполнение: ( -- a-addr )
            a-addr - адрес поля данных name. Семантика выполнения name может 
            быть расширена использованием DOES>.

        См.: 3.3.3 Область данных, 6.1.1250 DOES>.

 A.6.1.1000   CREATE
 Адрес области данных слова, определенного CREATE, дается указателем области 
 данных немедленно после выполнения CREATE.
 Резервирование пространства поля данных типично делается с помощью ALLOT.

 Типичное использование:
        ... CREATE SOMETHING ...

История[править]

Слово присутствует в Форте−79 и последующих, но имеет небольшие отличия из−за принятия на себя функций <BUILDS

В 1968 году Чак Мур работал в Mohasco Industries, Inc (Amsterdam NY, англ.). Первая версия интерпретатора, получившая название FORTH, заработала на миникомпьютере IBM 1130 с графическим дисплеем 2250 (16-битный процессор с ОЗУ 8К, дисководом, клавиатурой, принтером и ридером/панчером перфокарт). Первый FORTH знал слово CREATE под именем ENTER

CREATE создавал классическую словарную статью:

    ссылка на предыдущую запись
    счётчик и 3 символа
    код для выполнения
    параметры

Поле кода было важной инновацией, так как косвенный переход был единственным накладным расходом, как только слово было найдено. Про ценность счётчика для различения слов Чак Мур узнал от писателей компиляторов из Стэнфорда.

В 1970 году Чак Мур, создатель Форта, называл слова, кладущие на стек значение или адрес своего поля данных «существительными» (англ. noun).

Если CREATE используется, как часть современной конструкции CREATE…DOES> — в большинстве случаев при переносе такого определения слова на Каллисто достаточно просто заменить слово CREATE на слово <BUILDS

Английское слово create означает «создать».

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

     CREATE       --                            M,79
          A defining word executed in the form:
                  CREATE <name>
          Creates a dictionary entry for <name>.  After <name> is
          created, the next available dictionary location is the first
          byte of <name>'s parameter field.  When <name> is
          subsequently executed, the address of the first byte of
          <name>'s parameter field is left on the stack.  CREATE does
          not allocate space in <name>'s parameter field.

CREATE в стандарте Forth-79 (англ.)[править]

CREATE                                       239
    A defining word used in the form:
         CREATE  <name>
    to  create a dictionary entry for <name>,  without  allocating
    any  parameter  field memory.   When  <name>  is  subsequently
    executed,  the address of the first byte of <name>'s parameter
    field is left on the stack.

CREATE в fig-FORTH Release 1 glossary, май 1979 (англ.)[править]

CREATE
       A defining word used in the form:
                          CREATE cccc
       by such words as CODE and CONSTANT to create a dictionary header for
       a Forth definition. The code field contains the address of the words
       parameter field. The new word is created in the CURRENT vocabulary.

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

Создающая часть слова CREATE является высокоуровневой. Для ускорения исполнения создаваемых слов исполняющая часть слова CREATE написана на языке МК.

3310 ;#CREATE
3311 ; CREATE           ( −− )                               Создать начало статьи (до PFA) для следующего слова.
3312 ; Сформировать слово с именем XXX (заголовок и CFA), оставив его поле параметров пустым.
3313 ; При обращении к XXX на стек кладётся его адрес.
3314 ; Длина имени слова ограничивается 31 литерой
3315 ; Слово присутствует в Форте−79 и последующих, но имеет небольшие отличия из−за принятия на себя функций <BUILDS
3316 LCREAT:         .DB     6
3317                 .TEXT   "CREATE"                ; ( "<пр>имя" −− )
3318                 .DW     LIDDOT
3319 CREAT:          .DW CALL, BL,WORD, FIND, ZBRAN,CRE
3320                 .DW DROP,IDDOT,LITB             ; Наш FIND возвращает NFA
3321                 .DB 4
3322                 .DW MESS                        ; Сообщение, что такое слово уже есть
3323 CRE:            .DW HERE, DUP,CAT, LITB
3324                 .DB 31
3325                 .DW MIN                         ; Обрезать длину по 31 литеру
3326                 .DW DUP, CCOM                   ; биты SMUDGE и IMMEDIATE сброшены
3327                 .DW ALLOT                       ; Оставить слово как поле имени
3328                 .DW LATES, COMMA                ; NFA прошлого слова в поле связи
3329                 .DW CURR,UAT, STORE             ; Сделать слово последним в словаре CURRENT @
3330                 .DW LITP,SCRE, BRAN,RCOMMA      ; CFA: созданное слово кладёт на стек свой PFA
3331 SCRE:           RM7 10002 + KM3  KGOTO9         ; Созданные слова размещаются в области двоичных данных

Реализации из SP-Forth 4.20:

0 VALUE CREATE-CODE
…
CODE _CREATE-CODE
     LEA  EBP, -4 [EBP]
     MOV  [EBP], EAX
     POP EAX
     RET
END-CODE

' _CREATE-CODE TO CREATE-CODE
…
    '   _CREATE-CODE  >VIRT VALUE CREATE-CODE
…
: SHEADER ( addr u -- )
  HERE 0 , ( cfa )
\  DUP LAST-CFA !
  0 C,     ( flags )
  -ROT WARNING @
  IF 2DUP GET-CURRENT SEARCH-WORDLIST
     IF DROP 2DUP TYPE ."  isn't unique" CR THEN
  THEN
  CURRENT @ +SWORD
  ALIGN
  HERE SWAP ! ( заполнили cfa )
;

: HEADER
   PARSE-NAME SHEADER
;
…
: CREATE ( "<spaces>name" -- ) \ 94
  [T] HEADER [I]
  CREATE-CODE COMPILE,
;
USER LAST-CFA
…
VECT SHEADER

: SHEADER1 ( addr u -- )
  HERE 0 , ( cfa )
  DUP LAST-CFA !
  0 C,     ( flags )
  -ROT WARNING @
  IF 2DUP GET-CURRENT SEARCH-WORDLIST
     IF DROP 2DUP TYPE ."  isn't unique (" SOURCE-NAME TYPE ." )" CR THEN
  THEN
  CURRENT @ +SWORD

  ALIGN
  ( сдвигаем указатель кода так, чтобы при компиляции переменных и векторов )
  ( следующая ячейка данных, находящаяся после CALL *-CODE была выровнена:  )
  ALIGN-BYTES @ DUP 4 >
  IF 5 - ALLOT
  ELSE 1 - ALLOT
  THEN

  HERE SWAP ! ( заполнили cfa )
;
' SHEADER1 ' SHEADER TC-VECT!
…
: CREATED ( addr u -- )
\ Создать определение для c-addr u с семантикой выполнения, описанной ниже.
\ Если указатель пространства данных не выровнен, зарезервировать место
\ для выравнивания. Новый указатель пространства данных определяет
\ поле данных name. CREATE не резервирует место в поле данных name.
\ name Выполнение: ( -- a-addr )
\ a-addr - адрес поля данных name. Семантика выполнения name может
\ быть расширена с помощью DOES>.
  SHEADER

  HERE DUP LAST-CFA @ !
  DOES>A ! ( для DOES )
  ['] _CREATE-CODE COMPILE,
;

: CREATE ( "<spaces>name" -- ) \ 94
   PARSE-NAME CREATED
;

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

Юрий Семёнов приводит следующее определение слова CREATE (стр. 139):

  : CREATE   FINDN                      ( поиск слова в словаре)
             IF                              ( если оно найдено)
                DROP          ( запись адреса поля имени в стек)
                ID.                              ( печать имени)
                4 MESSAGE                     ( печать "MSG# 4")
             THEN HERE ↑ C@       ( запись в стек числа символов
                                 в слове)
             WIDTH @   ( максимально допустимое число символов в
                         имени )
             MIN            ( укорочение имени, если оно слишком
                              длинное)
             1+ ALLOT            ( выделение нужного числа байт)
             ?ALIGN     ( выравнивание выделенного числа байт на
                          чётную границу, что важно для ЭВМ типа
                          СМ)
             ↑ $A0 TOGGLE               ( коррекция байта имени)
             HERE 1- $80 TOGGLE     ( коррекция последнего байта
                                      имени)
             LAST ,                     ( формирование поля LFA)
             CURRENT @ !           ( коррекция значения CURRENT)
             HERE 2+ , ;                  ( заполнение поля CFA)

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

CREATE    -> СОЗДАТЬ НАЧАЛО СТАТЬИ (ДО PFA) ДЛЯ                 36
          СЛЕДУЮЩЕГО СЛОВА)
          ЕГО ИСПОЛНЕНИЕ КЛАДЕТ PFA НА СТЕК
CREATE#   A   НАЧАЛО ИСПОЛНИТЕЛЬНОЙ ЧАСТИ "VARIABLE"            3

                      Экран номер 3
(  09.09.86 ДОПОЛНИТЕЛЬНЫЕ ВХОДЫ  В АДРЕСНЫЙ ИНТЕРПРЕТАТОР)

A: CREATE#   RW1 14 LR,            (  ПОМЕСТИТЬ  РFA СТАТЬИ)
M: PUSHRW1   RSTACK  RTWO  SR,    ( ПОМЕСТИТЬ ЗНАЧЕНИЕ ИЗ RW1)
M: PUTRW1    RW1 PUT,   RNEXT BR, (   ЗАМЕНИТЬ   ВЕРХНЕЕ)

                     Экран номер 36
( 09.09.86  CREATE   DOES> )

: CREATE ( ->)   100  ?GAP
 ALIGNH -FIND SWAP DROP  IF
   HERE ID. ."  УЖЕ ЕСТЬ "        THEN
  HERE DUP С@ WIDTH AND 2+ ALLOT ALIGNH
  HERE OVER - 2- OVER C! LATEST , CURRENT @ !
  LIT [ CREATE# ] , ;

Определение слова CREATE в FORTH ИТЭФ:

             HEAD    206Q,'CREAT',305Q,GREAT,$COL         ; CREATE
             DW  DFIND,ZBRAN,CRE-$,DROP,TWOP,NFA,IDDOT
             DW  LIT,4,MESS
   CRE:      DW  HERE,DUBL,CAT,$WIDTH,AT,MIN,ONEP,ALLOT
             DW  DUBL,LIT,240Q,TOGL,HERE,ONEM
             DW  LIT,200Q,TOGL,LATES,COMMA,CURR,AT,STORE
             DW  HERE,TWOP,COMMA,SEMI

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


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


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