Текущая версия |
Ваш текст |
Строка 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]]
| |