(LITERAL)

Материал из ПМК вики
Перейти к навигации Перейти к поиску

(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

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


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


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