Редактирование: VALUE

Перейти к навигации Перейти к поиску
Внимание: Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы войдёте или создадите учётную запись, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий ниже, чтобы убедиться, что это нужная вам правка, и запишите страницу ниже, чтобы отменить правку.

Текущая версия Ваш текст
Строка 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]]
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Pmkwiki:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

В целях защиты вики от автоматического спама в правках просим вас решить следующую каптчу:

Отменить Справка по редактированию (в новом окне)
Источник — https://pmk.the-hacker.ru/VALUE