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
Реализации из SP-Forth 4.20:
CODE _TOVALUE-CODE POP EBX LEA EBX, -9 [EBX] MOV [EBX], EAX MOV EAX, [EBP] LEA EBP, 4 [EBP] RET END-CODE ' _TOVALUE-CODE TO TOVALUE-CODE … ' _TOVALUE-CODE >VIRT VALUE TOVALUE-CODE … : VALUE ( x "<spaces>name" -- ) \ 94 CORE EXT [T] HEADER [I] CONSTANT-CODE COMPILE, , TOVALUE-CODE COMPILE, ;
: VALUE ( x "<spaces>name" -- ) \ 94 CORE EXT \ Пропустить ведущие пробелы. Выделить name, ограниченное пробелом. Создать \ определение для name с семантикой выполнения, определенной ниже, с начальным \ значением равным x. \ name используется как "значение". \ Выполнение: ( -- x ) \ Положить x на стек. Значение x - то, которое было дано, когда имя создавалось, \ пока не исполнится фраза x TO name, задав новое значение x, \ ассоциированное с name. HEADER ['] _CONSTANT-CODE COMPILE, , ['] _TOVALUE-CODE COMPILE, ;
Ссылки[править]
- Исходный текст слова VALUE в Каллисто Классик 1.0
- См. слова TO, FVARIABLE, VARIABLE и DEFER
- См. также статью Векторное поле кода
- Слово VALUE и комментарий к нему в стандарте ANS Forth (англ.)
- Слово VALUE и комментарий к нему в черновике Forth 200x (англ.)
- Слово FVALUE (f-value) в черновике Forth 200x (англ.)
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |