+!: различия между версиями
Перейти к навигации
Перейти к поиску
AtH (обсуждение | вклад) Нет описания правки |
AtH (обсуждение | вклад) |
||
(не показано 20 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
'''+!''' ( | '''+!''' (прибавить, читается «плюс-присвоить») — стандартное слово [[Каллисто]]. | ||
+! ( n a −− ) Увеличить на n содержимое ячейки с адресом a. | |||
Добавляет к содержимому ячейки с адресом a число n | Добавляет к содержимому [[Ячейка (Каллисто)|ячейки]] с [[Единое адресное пространство|адресом]] a число n. Подразумевается, что слово не пересекает границ областей памяти. | ||
== Ввод слова +! == | |||
В [[Режим NUM|режиме NUM]] последовательно нажмите две клавиши [[Клавиша +|{{Серая клавиша|+}}]] [[Клавиша П|{{Чёрная клавиша|П}}]] | |||
== +! в стандарте 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 -- ) | ||
Строка 10: | Строка 13: | ||
См.: 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> | ||
: +! ( N,A ---> ) | 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> | |||
== Ссылки == | == Ссылки == | ||
* [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0130 | * {{Исходник|PlusStore|+!}} | ||
* [http:// | * См. слова [[Слово +|+]], [[Слово !|!]] и [[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] ''(англ.)'' | |||
Строка 42: | Строка 108: | ||
{{заготовка}} | {{заготовка}} | ||
[[Категория:Слова Каллисто]] | [[Категория:Слова Каллисто]] | ||
[[Категория:Примитивы]] | |||
[[Категория:Арифметические операции Каллисто]] | [[Категория:Арифметические операции Каллисто]] | ||
[[Категория:Работа с памятью Каллисто]] | [[Категория:Работа с памятью Каллисто]] | ||
[[Категория:Стандартные слова]] | |||
[[Категория:1994 CORE]] | |||
[[Категория:2012 CORE]] |
Текущая версия от 16:59, 10 ноября 2017
+! (прибавить, читается «плюс-присвоить») — стандартное слово Каллисто.
+! ( n a −− ) Увеличить на n содержимое ячейки с адресом a.
Добавляет к содержимому ячейки с адресом a число n. Подразумевается, что слово не пересекает границ областей памяти.
Ввод слова +![править]
В режиме NUM последовательно нажмите две клавиши + П
+! в стандарте ANS Forth[править]
6.1.0130 +! "plus-store" CORE ( n|u a-addr -- ) Прибавляет n|u к числу одна-ячейка в a-addr. См.: 3.3.3.1 Выравнивание адреса.
История[править]
+! в предыдущем стандарте 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".
Реализация[править]
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
Реализация из SP-Forth 4.20:
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
Советская реализация[править]
У Баранова-Ноздрунова (стр. 22) и Юрия Семёнова (стр. 22) приводится следующее определение слова +!:
: +! ( N,A ---> ) ( в стеке n ADR ) ↑ ( n ADR ADR ) @ ( запись в стек содержимого адреса n ADR [ADR] ) rot ( ADR [ADR] n ) + ( приращение ADR [ADR]+n ) ↔ ( [ADR]+n ADR ) ! ; ( запись результата по адресу, хранящемуся стеке)
Слово +! в ФОРТ-ЕС было примитивом. Вот его описание и определение:
+! 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
В FORTH ИТЭФ слово +! также было примитивом, вот его определение:
HEAD 202Q,'+',241Q,PSTOR ; +! POP BX POP CX ADD [BX], CX NEXT
Ссылки[править]
- Исходный текст слова +! в Каллисто Классик 1.0
- См. слова +, ! и TOGGLE
- Слово +! (plus-store) в стандарте ANS Forth (англ.)
- Слово +! (plus-store) в черновике Forth 200x (англ.)
- Augmented assignment в английской Википедии (англ.)
- Variables, Constants, and Arrays в книге Leo Brodie Starting Forth (англ.)
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |