VALUE: различия между версиями
Перейти к навигации
Перейти к поиску
AtH (обсуждение | вклад) Нет описания правки |
AtH (обсуждение | вклад) |
||
(не показаны 22 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
'''VALUE''' (величина) — стандартное порождающее слово [[Каллисто]]. | '''VALUE''' (величина) — стандартное порождающее слово [[Каллисто]]. | ||
VALUE ( x −− ) Определить следующее слово, как десятичную величину | |||
Определить следующее слово как десятичную | с начальным значением x. | ||
[[Файл:CallistoValueTo.png|thumb|right|264px|Пример работы слова VALUE]] | |||
Определить следующее слово, как десятичную величину, которая хранит [[десятичное число]]. | |||
== Ввод слова 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" -- ) | ||
Строка 30: | Строка 33: | ||
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> | |||
== Ссылки == | == Ссылки == | ||
* См. слова [[TO]], [[VARIABLE]] | * {{Исходник|VALUE|VALUE}} | ||
* См. слова [[TO]], [[FVARIABLE]], [[VARIABLE]] и [[DEFER]] | |||
* См. также статью [[Векторное поле кода]] | * См. также статью [[Векторное поле кода]] | ||
* Слово [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://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:// | * Слово [http://forth-standard.org/standard/core/VALUE VALUE] и [http://forth-standard.org/standard/rationale#rat:core:VALUE комментарий к нему] в черновике Forth 200x ''(англ.)'' | ||
* Слово [http:// | * Слово [http://forth-standard.org/standard/float/FVALUE FVALUE (f-value)] в черновике Forth 200x ''(англ.)'' | ||
{{заготовка}} | {{заготовка}} | ||
[[Категория:Слова Каллисто]] | [[Категория:Слова Каллисто]] | ||
[[Категория:Слова высокого уровня]] | |||
[[Категория:Порождающие слова Каллисто]] | [[Категория:Порождающие слова Каллисто]] | ||
[[Категория: | [[Категория:Стандартные слова]] | ||
[[Категория:1994 CORE EXT]] | |||
[[Категория:2012 CORE EXT]] |
Текущая версия от 21:34, 13 ноября 2017
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 (англ.)
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |