Текущая версия |
Ваш текст |
Строка 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] ''(англ.)''
| |
| | |
|
| |
|
| {{нет иллюстраций}} | | {{нет иллюстраций}} |
| {{заготовка}} | | {{заготовка}} |
| [[Категория:Слова Каллисто]] | | [[Категория:Слова Каллисто]] |
| [[Категория:Примитивы]]
| |