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

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

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

Текущая версия Ваш текст
Строка 1: Строка 1:
'''+!''' (прибавить, читается «плюс-присвоить») — стандартное слово [[Каллисто]].
'''+!''' — стандартное слово [[Каллисто]].
+!            ( n a −− )                          Увеличить на n содержимое ячейки с адресом a.
Добавляет к содержимому [[Ячейка (Каллисто)|ячейки]] с [[Единое адресное пространство|адресом]] a число n. Подразумевается, что слово не пересекает границ областей памяти.
 
== Ввод слова +! ==
В [[Режим NUM|режиме NUM]] последовательно нажмите две клавиши [[Клавиша +|{{Серая клавиша|+}}]] [[Клавиша П|{{Чёрная клавиша|П}}]]
 
== +! в стандарте ANS Forth ==
<PRE>
6.1.0130  +!                              "plus-store"                    CORE
            ( n|u a-addr -- )
            Прибавляет n|u к числу одна-ячейка в a-addr.
 
        См.: 3.3.3.1 Выравнивание адреса.
</PRE>
 
== История ==
=== +! в предыдущем стандарте Forth-83 (англ.) ===
      +!          w1 addr --                    79        "plus-store"
          w1 is added to the w value at addr using the convention for
          + .  This sum replaces the original value at addr.
 
=== +! в стандарте Forth-79 (англ.) ===
+!            n addr --                    157      "plus-store"
    Add  n to the 16-bit value at the address,  by the  convention
    given for + .
 
=== +! в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
+!    n  addr  ---                    L0
        Add n to the value at the address.
        Pronounced "plus-store".
 
== Реализация ==
<pre>
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 ADR ADR  )
      @      ( запись в стек содержимого адреса n ADR [ADR] )
      rot                            (          ADR [ADR] n )
      +                          ( приращение  ADR [ADR]+n )
      ↔                              (          [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|+!}}
* [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0130 Слово +! (plus-store) в стандарте ANS Forth] ''(англ.)''
* См. слова [[Слово +|+]], [[Слово !|!]] и [[TOGGLE]]
* Слово [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 ''(англ.)''
* [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] ''(англ.)''


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

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

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