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

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

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

Текущая версия Ваш текст
Строка 1: Строка 1:
'''+!''' (прибавить, читается «плюс-присвоить») — стандартное слово [[Каллисто]].
'''+!''' (плюс-присвоить, добавить) — стандартное слово [[Каллисто]].
+!            ( n a −− )                          Увеличить на n содержимое ячейки с адресом a.
 
Добавляет к содержимому [[Ячейка (Каллисто)|ячейки]] с [[Единое адресное пространство|адресом]] a число n. Подразумевается, что слово не пересекает границ областей памяти.
Добавляет к содержимому ячейки с адресом a число n


== Ввод слова +! ==
== Ввод слова +! ==
Строка 7: Строка 7:


== +! в стандарте ANS Forth ==
== +! в стандарте ANS Forth ==
<PRE>
  6.1.0130  +!                              "plus-store"                    CORE
  6.1.0130  +!                              "plus-store"                    CORE
             ( n|u a-addr -- )
             ( n|u a-addr -- )
Строка 13: Строка 12:


         См.: 3.3.3.1 Выравнивание адреса.
         См.: 3.3.3.1 Выравнивание адреса.
</PRE>


== История ==
 
=== +! в предыдущем стандарте Forth-83 (англ.) ===
== +! в предыдущем стандарте Forth-83 (англ.) ==
       +!          w1 addr --                    79        "plus-store"
       +!          w1 addr --                    79        "plus-store"
           w1 is added to the w value at addr using the convention for
           w1 is added to the w value at addr using the convention for
           + .  This sum replaces the original value at addr.
           + .  This sum replaces the original value at addr.


=== +! в стандарте Forth-79 (англ.) ===
 
== +! в стандарте Forth-79 (англ.) ==
  +!            n addr --                    157      "plus-store"
  +!            n addr --                    157      "plus-store"
     Add  n to the 16-bit value at the address,  by the  convention
     Add  n to the 16-bit value at the address,  by the  convention
     given for + .
     given for + .


=== +! в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
 
== +! в fig-FORTH Release 1 glossary, май 1979 (англ.) ==
  +!    n  addr  ---                    L0
  +!    n  addr  ---                    L0
         Add n to the value at the address.
         Add n to the value at the address.
         Pronounced "plus-store".
         Pronounced "plus-store".


== Реализация ==
== Реализация +! ==
<pre>
У Баранова-Ноздрунова (стр. 22) и Юрия Семёнова (стр. 22) приводится следующее описание слова +!:
2064 ;#PlusStore
2065 ; +!              ( y a −− )                          Увеличить на y содержимое ячейки с адресом a.
2066 ; Добавить к содержимому ячейки с адресом a число y
2067 ; Подразумевается, что ячейка не пересекает границ областей памяти
2068 ; Может увеличивать содержимое десятичных регистров, но не регистров функций
2069 LPSTOR:        .DB    2
2070                .TEXT  "+!"
2071                .DW    LTIB
2072 PSTOR:          .DW    JPSTOR
2073 JPSTOR:        RM3 MA  1 + M8  1 + M3
2074                KRMA 1 EE 4 −  KX>=09  MA      ; Защита от "переменных" в памяти программ
2075                1000 −  FX>=0 PSTOR1            ; 1000 быстрее, чем 1 ВП 3
2076                RMA 1 + MB
2077                KRMA RME ∗ KRMB +              ; @
2078                KRM8 +                          ; +
2079                RME FX^2 +                      ; X1 := 65536
2080 PSTOR3:        FANS −  FX<0 PSTOR3
2081 PSTOR4:        FANS +  FX>=0 PSTOR4
2082 PSTOR2:        ENT RME / KINT KMA
2083                RME ∗ − KMB  KGOTO9            ; ! EXIT
2084 PSTOR1:        KRMA KRM8 + KMA  KGOTO9
</pre>
Реализация из SP-Forth 4.20:
<pre>
CODE +! ( n|u a-addr -- ) \ 94
\ Прибавить n|u к одинарному числу по адресу a-addr.
    MOV EDX, [EBP]
    ADD [EAX], EDX
    MOV EAX, 4 [EBP]
    LEA EBP, 8 [EBP]
    RET
END-CODE
</pre>
 
=== Советская реализация ===
У Баранова-Ноздрунова (стр. 22) и Юрия Семёнова (стр. 22) приводится следующее определение слова +!:
   : +!  ( N,A ---> )                ( в стеке  n ADR      )
   : +!  ( N,A ---> )                ( в стеке  n ADR      )
       ↑                              (          n ADR ADR  )
       ↑                              (          n ADR ADR  )
Строка 76: Строка 40:
       ↔                              (          [ADR]+n ADR )
       ↔                              (          [ADR]+n ADR )
       ! ;  ( запись результата по адресу, хранящемуся стеке)
       ! ;  ( запись результата по адресу, хранящемуся стеке)
Слово +! в ФОРТ-ЕС было [[примитив]]ом. Вот его описание и определение:
<PRE>
  +!          W,A ->                УВЕЛИЧИТЬ ЗНАЧЕНИЕ ПО АДРЕСУ A НА W  17
                    Экран номер 17
( 31.03,64  NEGATE ABS + - 1+ 1- 2+ 2- +!  1+!  )
CODE +!  ( W,A->)  14 LHRW12 BAL,  RW2 RМASК NR,  RW1 0 (,
  RW2 RFORTH AН, RW1 0 (, RW2 RFORTH SТН, 2РОР B, END-CODE
</PRE>
В FORTH ИТЭФ слово +! также было [[примитив]]ом, вот его определение:
<PRE>
            HEAD    202Q,'+',241Q,PSTOR                  ; +!
            POP  BX
            POP  CX
            ADD  [BX], CX
            NEXT
</PRE>


== Ссылки ==
== Ссылки ==
* {{Исходник|PlusStore|+!}}
* См. слова [[Слово +|+]], [[Слово !|!]] и [[TOGGLE]]
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0130 +! (plus-store)] в стандарте ANS Forth ''(англ.)''
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0130 +! (plus-store)] в стандарте ANS Forth ''(англ.)''
* Слово [http://forth-standard.org/standard/core/PlusStore +! (plus-store)] в черновике Forth 200x ''(англ.)''
* Слово [http://www.forth200x.org/documents/html3/core/PlusStore.html +! (plus-store)] в черновике Forth 200x ''(англ.)''
* [https://en.wikipedia.org/wiki/Augmented_assignment Augmented assignment в английской Википедии] ''(англ.)''
* [https://en.wikipedia.org/wiki/Augmented_assignment Augmented assignment в английской Википедии] ''(англ.)''
* [http://www.forth.com/starting-forth/sf8/sf8.html Variables, Constants, and Arrays] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''




Строка 108: Строка 50:
{{заготовка}}
{{заготовка}}
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто]]
[[Категория:Примитивы]]
[[Категория:Арифметические операции Каллисто]]
[[Категория:Арифметические операции Каллисто]]
[[Категория:Работа с памятью Каллисто]]
[[Категория:Работа с памятью Каллисто]]
[[Категория:Стандартные слова]]
[[Категория:Слова Каллисто без стековых диаграмм]]
[[Категория:1994 CORE]]
[[Категория:2012 CORE]]
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Pmkwiki:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

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

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