VALUE
VALUE (величина) — стандартное порождающее слово Каллисто.
VALUE ( x −− ) Определить следующее слово, как десятичную величину с начальным значением x.
Определить следующее слово, как десятичную величину, которая хранит десятичное число.
Ввод слова VALUE
В режиме ЛАТ последовательно нажмите клавиши ↔ ШГ← − 3 ИП
VALUE в стандарте ANS Forth
6.2.2405 VALUE CORE EXT ( x "<spaces>name" -- ) Пропускает ведущие разделители пробелы. Выделяет name, ограниченное пробелом. Создает определение для name с семантикой выполнения, определенной ниже, с начальным значением равным x. name определено как "value". name Выполнение: ( -- x ) Помещает x на стек. Значение x - то что задано, при создании name, до тех пор пока не выполнена фраза x TO name, задающая новое значение x, связанное с name. См.: 3.4.1 Синтаксический анализ. A.6.2.2405 VALUE Типичное использование: 0 VALUE DATA : EXCHANGE ( n1 -- n2 ) DATA SWAP TO DATA ; EXCHANGE оставляет n1 в DATA и возвращает предшествующее значение n2.
Реализация
Слово VALUE резервирует десятичный регистр и присваивает ему имя, по которому из Каллисто будет производиться обращение к этому регистру, а также начальное значение.
Для записи в отведённый десятичный регистр в Каллисто используется слово TO.
Создающая часть слова VALUE является высокоуровневой. Для ускорения исполнения величин обе исполняющие части слова VALUE написаны на языке МК.
2546 ;#VALUE 2547 ; VALUE ( x −− ) Определить следующее слово, как десятичную величину с начальным значением x. 2548 ; Для хранения величин VALUE используются десятичные регистры. 2549 ; Данные хранятся в ячейке между двумя CFA, чтобы разработчик мог определять собственные 2550 ; порождающие слова с двумя обработчиками высокого уровня, использущие стандартное TO 2551 LVALUE: .DB 5 2552 .TEXT "VALUE" ; ( x "<пр>имя" −− ) 2553 .DW LFVAR 2554 VALUE: .DW CALL, CREAT, DHERE, LITP 2555 .DB 39,16 ; 10000 2556 .DW SUB, COMMA, DCOMMA, LITP,TOVALUE,COMMA, PSCOD 2557 ; Исполняющая часть VALUE (обычное вхождение величины) 2558 RM7 1 + M5 ; ( −− x ) из десятичного регистра 2559 KRM5 RME ∗ KRM5 + M7 ; Получить номер регистра 2560 KRM7 KM3 KGOTO9 ; Положить значение на стек, NEXT 2561 TOVALUE: RM7 3 − M5 ; ( x −− ) в десятичный регистр 2562 KRM5 RME ∗ KRM5 + M7 ; Получить номер регистра 2563 RM3 MA 1 + M3 ; RA := адрес значения 2564 KRMA KM7 KGOTO9 ; Записать значение в десятичный регистр, NEXT
Ссылки
- Исходный текст слова VALUE в Каллисто Классик 1.0
- См. слова TO, FVARIABLE, VARIABLE и DEFER
- См. также статью Векторное поле кода
- Слово VALUE и комментарий к нему в стандарте ANS Forth (англ.)
- Слово VALUE и комментарий к нему в черновике Forth 200x (англ.)
- Слово FVALUE (f-value) в черновике Forth 200x (англ.)
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |