(LITERAL): различия между версиями

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Нет описания правки
 
(не показано 28 промежуточных версий этого же участника)
Строка 1: Строка 1:
'''(LITERAL)''' — стандартное слово [[Каллисто]].
'''(LITERAL)''' — служебное слово [[Каллисто]].
(LITERAL)      ( −− x )                            Код периода выполнения для литерала.
Код периода выполнения для [[LITERAL|литерала]].
 
== Ввод слова (LITERAL) ==
В [[Режим NUM|режиме NUM]] последовательно нажмите клавиши {{ШГ→}}   [[Клавиша Р-ГРД-Г|{{Чёрная клавиша|Р-ГРД-Г}}]] [[Клавиша -|{{Серая клавиша|−}}]] [[Клавиша 7|{{Серая клавиша|7}}]] [[Клавиша 2|{{Серая клавиша|2}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша ×|{{Серая клавиша|×}}]] {{ШГ←}} [[Клавиша -|{{Серая клавиша|−}}]]   [[Клавиша P|{{Синяя клавиша|P}}]] {{ШГ←}}
 
== История ==
Имя (LITERAL) взято у Броуди, соответствует духу [[Каллисто]].
 
=== LIT в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
LIT          ---  n                        C2,L0
        Within a colon-definition, LIT is automatically compiled before each
        16 bit literal number encountered in input text. Later execution of
        LIT causes the contents of the next dictionary address to be pushed
        to the stack.
 
== Реализация ==
Литералы в области данных — целые 16-битные числа со знаком.
 
В [[Каллисто|Каллисто 1.0]] тело словарной статьи для (LITERAL) содержит два «подпольных» [[CFA|токена]] LITP и LITB, позволяющие использовать беззнаковые 16- и 8-битные литералы в [[Память программ|памяти программ]]:
<pre>
586 ;#xLITERAL
587 ; (LITERAL)        ( −− x )                            Код периода выполнения для литерала.
588 ; В шитом коде за (LITERAL) идёт двухбайтовое целое со знаком в шестнадцатеричном формате.
589 LLIT:          .DB    9
590                .TEXT  "(LITERAL)"
591                .DW    LQBREAK
592 LITD:          .DW    JLITD
593 JLITD:          KRM6 RME ∗ KRM6
594 PLUSKM3M:      +                              ; Код повторно используется обработчиком CONSTANT
595                KM3                            ; PUSH MEMW[RI++]
596                32768 − KX>=09                  ; Если число положительное, NEXT
597                FANS − PKM03  KGOTO9            ; Обработка отрицательных чисел, NEXT
598 LITP:          .DW    JLITP                  ; Литералы в области памяти программ
599 JLITP:          PPRM9044 RME ∗ PPRM9044 +      ; Все литералы в области программ положительные!
600                KM3  KGOTO9                    ; PUSH MEMW[RI++]
601 LITB:          .DW    JLITB
602 JLITB:          PPRM9044 KM3  KGOTO9            ; Специальный байтовый литерал для памяти программ.
</pre>
Реализации из SP-Forth 4.20:
<pre>
: TC-LIT,
  S" DUP" TC-FINDOUT INLINE,
  OPT_INIT
  SetOP 0B8 C,  , OPT  \ MOV EAX, #
  OPT_CLOSE ;
</pre>
<pre>
: LIT, ( W -> )
  ['] DUP  INLINE,
  OPT_INIT
  SetOP 0B8 C,  , OPT  \ MOV EAX, #
  OPT_CLOSE
;
</pre>
 
=== Советская реализация ===
У Баранова-Ноздрунова приводится следующее определение слова (LITERAL) (стр. 53):
  : (LITERAL)  ( ---> A )    I  @  R>  2+  >R  ;
 
Слово (LITERAL) в ФОРТ-ЕС и FORTH ИТЭФ было [[примитив]]ом и называлось LIT
 
Вот его описание и определение из ФОРТ-ЕС:
<PRE>
LIT      *K ->W ПОМЕСТИТЬ НА СТЕК СЛЕДУЮЩИЙ КОД                23
 
                    Экран номер 23
( 31.03.84    LIT 2LIT LITERAL 2LITERAL SPACE SPACES )
 
CODE LIT  ( ->W )      RW1 0 (, RI RFORTH LH,
RI RTWO AR,  PUSHRW1 B,  END-CODE
</PRE>
 
Вот его определение из FORTH ИТЭФ:
<PRE>
            HEAD    203Q,'LI',324Q,LIT                  ; LIT
            LODSW
            PUSH  AX
            NEXT
</PRE>
 
== Ссылки ==
* {{Исходник|xLITERAL|(LITERAL)}}
* [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\11.RASSIRENIE%20KOMPILATORA:%20OPREDELAUSIE%20I%20KOMPILIRUUSIE%20SLOWA РАСШИРЕНИЕ КОМПИЛЯТОРА: ОПРЕДЕЛЯЮЩИЕ И КОМПИЛИРУЮЩИЕ СЛОВА] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»]
* [http://www.forth.com/starting-forth/sf11/sf11.html Extending the Compiler] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''


Код периода выполнения для литерала.


{{нет иллюстраций}}
{{нет иллюстраций}}
{{заготовка}}
{{заготовка}}
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто]]
[[Категория:Примитивы]]

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

(LITERAL) — служебное слово Каллисто.

(LITERAL)      ( −− x )                             Код периода выполнения для литерала.

Код периода выполнения для литерала.

Ввод слова (LITERAL)[править]

В режиме NUM последовательно нажмите клавиши  ШГ→     Р-ГРД-Г      7   2   ИП   ×   ШГ←        P   ШГ← 

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

Имя (LITERAL) взято у Броуди, соответствует духу Каллисто.

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

LIT           ---  n                        C2,L0
       Within a colon-definition, LIT is automatically compiled before each
       16 bit literal number encountered in input text. Later execution of
       LIT causes the contents of the next dictionary address to be pushed
       to the stack.

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

Литералы в области данных — целые 16-битные числа со знаком.

В Каллисто 1.0 тело словарной статьи для (LITERAL) содержит два «подпольных» токена LITP и LITB, позволяющие использовать беззнаковые 16- и 8-битные литералы в памяти программ:

 586 ;#xLITERAL
 587 ; (LITERAL)        ( −− x )                             Код периода выполнения для литерала.
 588 ; В шитом коде за (LITERAL) идёт двухбайтовое целое со знаком в шестнадцатеричном формате.
 589 LLIT:           .DB     9
 590                 .TEXT   "(LITERAL)"
 591                 .DW     LQBREAK
 592 LITD:           .DW     JLITD
 593 JLITD:          KRM6 RME ∗ KRM6
 594 PLUSKM3M:       +                               ; Код повторно используется обработчиком CONSTANT
 595                 KM3                             ; PUSH MEMW[RI++]
 596                 32768 − KX>=09                  ; Если число положительное, NEXT
 597                 FANS − PKM03  KGOTO9            ; Обработка отрицательных чисел, NEXT
 598 LITP:           .DW     JLITP                   ; Литералы в области памяти программ
 599 JLITP:          PPRM9044 RME ∗ PPRM9044 +       ; Все литералы в области программ положительные!
 600                 KM3  KGOTO9                     ; PUSH MEMW[RI++]
 601 LITB:           .DW     JLITB
 602 JLITB:          PPRM9044 KM3  KGOTO9            ; Специальный байтовый литерал для памяти программ.

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

: TC-LIT,
  S" DUP" TC-FINDOUT INLINE,
  OPT_INIT
  SetOP 0B8 C,  , OPT  \ MOV EAX, #
  OPT_CLOSE ;
: LIT, ( W -> )
  ['] DUP  INLINE,
  OPT_INIT
  SetOP 0B8 C,  , OPT  \ MOV EAX, #
  OPT_CLOSE
;

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

У Баранова-Ноздрунова приводится следующее определение слова (LITERAL) (стр. 53):

 : (LITERAL)   ( ---> A )    I  @  R>  2+  >R  ;

Слово (LITERAL) в ФОРТ-ЕС и FORTH ИТЭФ было примитивом и называлось LIT

Вот его описание и определение из ФОРТ-ЕС:

LIT       *K ->W ПОМЕСТИТЬ НА СТЕК СЛЕДУЮЩИЙ КОД                23

                     Экран номер 23
( 31.03.84    LIT 2LIT LITERAL 2LITERAL SPACE SPACES )

CODE LIT   ( ->W )      RW1 0 (, RI RFORTH LH,
 RI RTWO AR,  PUSHRW1 B,  END-CODE

Вот его определение из FORTH ИТЭФ:

             HEAD    203Q,'LI',324Q,LIT                   ; LIT
             LODSW
             PUSH  AX
             NEXT

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


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


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