Текущая версия |
Ваш текст |
Строка 1: |
Строка 1: |
| '''VALUE''' (величина) — стандартное порождающее слово [[Каллисто]]. | | '''VALUE''' (величина) — стандартное порождающее слово [[Каллисто]]. |
| VALUE ( x −− ) Определить следующее слово, как десятичную величину
| |
| с начальным значением x.
| |
| [[Файл:CallistoValueTo.png|thumb|right|264px|Пример работы слова VALUE]]
| |
| Определить следующее слово, как десятичную величину, которая хранит [[десятичное число]].
| |
|
| |
|
| == Ввод слова VALUE ==
| | Определить следующее слово как десятичную переменную, в которой хранятся [[Десятичное число|десятичные числа]]. |
| В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша ↔|{{Серая клавиша|↔}}]] {{ШГ←}} [[Клавиша -|{{Серая клавиша|−}}]] [[Клавиша 3|{{Серая клавиша|3}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]]
| | |
|
| |
|
| == VALUE в стандарте ANS Forth == | | == VALUE в стандарте ANS Forth == |
| <PRE>
| |
| 6.2.2405 VALUE CORE EXT | | 6.2.2405 VALUE CORE EXT |
| ( x "<spaces>name" -- ) | | ( x "<spaces>name" -- ) |
Строка 33: |
Строка 28: |
|
| |
|
| EXCHANGE оставляет n1 в DATA и возвращает предшествующее значение n2. | | EXCHANGE оставляет n1 в DATA и возвращает предшествующее значение n2. |
| </PRE>
| |
|
| |
| == Реализация ==
| |
| Слово [[VALUE]] резервирует [[десятичный регистр]] и присваивает ему имя, по которому из [[Каллисто]] будет производиться обращение к этому регистру, а также начальное значение.
| |
|
| |
| Для записи в отведённый [[десятичный регистр]] в Каллисто используется слово [[TO]].
| |
|
| |
| Создающая часть слова VALUE является высокоуровневой. Для ускорения исполнения величин обе исполняющие части слова VALUE написаны на [[ЯМК|языке МК]].
| |
| <pre>
| |
| 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
| |
| </pre>
| |
| Реализации из SP-Forth 4.20:
| |
| <pre>
| |
| 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,
| |
| ;
| |
| </pre>
| |
| <pre>
| |
| : 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,
| |
| ;
| |
| </pre>
| |
|
| |
|
| == Ссылки == | | == Ссылки == |
| * {{Исходник|VALUE|VALUE}}
| | * См. слова [[TO]], [[VARIABLE]] |
| * См. слова [[TO]], [[FVARIABLE]], [[VARIABLE]] и [[DEFER]] | | * См. статью [[Векторное поле кода]] |
| * См. также статью [[Векторное поле кода]] | | * [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.2.2405 Слово VALUE в стандарте ANS Forth] ''(англ.)'' и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.2.2405 комментарии к нему] ''(англ.)'' |
| * Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.2.2405 VALUE] и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.2.2405 комментарий к нему] в стандарте ANS Forth ''(англ.)'' | | * [http://www.forth200x.org/documents/html/core.html#core:VALUE Слово VALUE в черновике Forth 200x] ''(англ.)'' и [http://www.forth200x.org/documents/html/rationale.html#rat:core:VALUE комментарий к нему] ''(англ.)'' |
| * Слово [http://forth-standard.org/standard/core/VALUE VALUE] и [http://forth-standard.org/standard/rationale#rat:core:VALUE комментарий к нему] в черновике Forth 200x ''(англ.)'' | | * [http://www.forth200x.org/documents/html/float.html#floating:FVALUE Слово FVALUE (f-value) в черновике Forth 200x] ''(англ.)'' |
| * Слово [http://forth-standard.org/standard/float/FVALUE FVALUE (f-value)] в черновике Forth 200x ''(англ.)'' | |
|
| |
|
|
| |
|
| | {{нет иллюстраций}} |
| {{заготовка}} | | {{заготовка}} |
| [[Категория:Слова Каллисто]] | | [[Категория:Слова Каллисто]] |
| [[Категория:Слова высокого уровня]]
| |
| [[Категория:Порождающие слова Каллисто]] | | [[Категория:Порождающие слова Каллисто]] |
| [[Категория:Стандартные слова]] | | [[Категория:Слова Каллисто без стековых диаграмм]] |
| [[Категория:1994 CORE EXT]]
| |
| [[Категория:2012 CORE EXT]]
| |