(LITERAL): различия между версиями
Перейти к навигации
Перейти к поиску
AtH (обсуждение | вклад) Нет описания правки |
AtH (обсуждение | вклад) |
||
(не показана 21 промежуточная версия этого же участника) | |||
Строка 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 в fig-FORTH Release 1 glossary, май 1979 (англ.) === | ||
LIT --- n C2,L0 | LIT --- n C2,L0 | ||
Within a colon-definition, LIT is automatically compiled before each | Within a colon-definition, LIT is automatically compiled before each | ||
Строка 13: | Строка 16: | ||
to the stack. | to the stack. | ||
== Реализация (LITERAL) == | == Реализация == | ||
У Баранова-Ноздрунова приводится следующее | Литералы в области данных — целые 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) ( ---> 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] ''(англ.)'' | |||
Строка 22: | Строка 91: | ||
[[Категория:Слова Каллисто]] | [[Категория:Слова Каллисто]] | ||
[[Категория:Примитивы]] | [[Категория:Примитивы]] | ||
Текущая версия от 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
Ссылки[править]
- Исходный текст слова (LITERAL) в Каллисто Классик 1.0
- РАСШИРЕНИЕ КОМПИЛЯТОРА: ОПРЕДЕЛЯЮЩИЕ И КОМПИЛИРУЮЩИЕ СЛОВА в книге Л.Броуди «Начальный курс программирования на языке Форт»
- Extending the Compiler в книге Leo Brodie Starting Forth (англ.)
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |