CMOVE〉: различия между версиями

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Нет описания правки
Строка 1: Строка 1:
'''CMOVE>''' — стандартное слово [[Каллисто]].
CMOVE>        ( a1 a2 u −− )                      Копировать u байтов из a1 в a2, начиная с больших адресов.
[[Файл:cmoveup.gif|thumb|right|150px|Использование cmove&gt; ( addr1 addr2 u -- ).<br>Картинка из книги Лео Броди «Starting FORTH»]]
[[Файл:cmoveup.gif|thumb|right|150px|Использование cmove&gt; ( addr1 addr2 u -- ).<br>Картинка из книги Лео Броди «Starting FORTH»]]
'''CMOVE&gt;''' — стандартное слово [[Каллисто]].
== Ввод слова CMOVE&gt; ==
== Ввод слова CMOVE&gt; ==
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша С/П|{{Чёрная клавиша|С/П}}]] [[Клавиша ÷|{{Серая клавиша|÷}}]] [[Клавиша 5|{{Серая клавиша|5}}]] [[Клавиша ↔|{{Серая клавиша|↔}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] &nbsp; [[Клавиша P|{{Синяя клавиша|P}}]] [[Клавиша F|{{Оранжевая клавиша|F}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]]
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша С/П|{{Чёрная клавиша|С/П}}]] [[Клавиша ÷|{{Серая клавиша|÷}}]] [[Клавиша 5|{{Серая клавиша|5}}]] [[Клавиша ↔|{{Серая клавиша|↔}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] &nbsp; [[Клавиша P|{{Синяя клавиша|P}}]] [[Клавиша F|{{Оранжевая клавиша|F}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]]
Строка 62: Строка 62:


== Ссылки ==
== Ссылки ==
* {{Исходник|CMOVEtop|CMOVE&gt;}}
* См. также слова [[CMOVE]] [[FILL]] [[ERASE]] [[BLANK]]
* См. также слова [[CMOVE]] [[FILL]] [[ERASE]] [[BLANK]]
* Слово [http://forth.sourceforge.net/standard/dpans/dpans17.htm#17.6.1.0920 CMOVE&gt; (c-move-up)] и [http://forth.sourceforge.net/standard/dpans/dpansa17.htm#A.17.6.1.0920 комментарий к нему] в стандарте ANS Forth ''(англ.)''
* Слово [http://forth.sourceforge.net/standard/dpans/dpans17.htm#17.6.1.0920 CMOVE&gt; (c-move-up)] и [http://forth.sourceforge.net/standard/dpans/dpansa17.htm#A.17.6.1.0920 комментарий к нему] в стандарте ANS Forth ''(англ.)''
Строка 73: Строка 74:
[[Категория:Примитивы]]
[[Категория:Примитивы]]
[[Категория:Работа с памятью Каллисто]]
[[Категория:Работа с памятью Каллисто]]
[[Категория:Слова Каллисто без стековых диаграмм]]

Версия от 17:29, 4 июня 2016

CMOVE> — стандартное слово Каллисто.

CMOVE>         ( a1 a2 u −− )                       Копировать u байтов из a1 в a2, начиная с больших адресов.
Использование cmove> ( addr1 addr2 u -- ).
Картинка из книги Лео Броди «Starting FORTH»

Ввод слова CMOVE>

В режиме ЛАТ последовательно нажмите клавиши  С/П   ÷   5      ИП     P   F   ИП 

Эти нажатия оставляют клавиатуру в режиме NUM.

CMOVE> в стандарте ANS Forth

17.6.1.0920   CMOVE>                  "c-move-up"                        STRING
           ( c-addr1 c-addr2 u -- )
           Если u больше чем нуль, копирует u последовательных символов из 
           области данных начинающейся с c-addr1 в область, начинающуюся с c-
           addr2, выполняя посимвольно с наибольших адресов к наименьшим.
       Отличие с: 17.6.1.0910 CMOVE.
A.17.6.1.0920   CMOVE>
Если c-addr1 находится в пределах области назначения, (то есть, когда c-addr1 
больше чем или равно c-addr2 и c-addr2 - меньше чем количество c-addr1 u CHARS 
+), происходит размножение памяти.
Типичное использование:
Предположите символьную строку по адресу 100: "ABCD".
Тогда после
       100 DUP CHAR+ SWAP 3 CMOVE>, строка по адресу 100 - "DDDD".

CMOVE> в предыдущем стандарте Forth-83 (англ.)

     CMOVE>       addr1 addr2 u --              83         "c-move-up"
          Move the u bytes at address addr1 to addr2.  The move begins
          by moving the byte at (addr1 plus u minus 1) to (addr2 plus
          u minus 1) and proceeds to successively lower addresses for
          u bytes.  If u is zero nothing is moved.  (Useful for
          sliding a string towards higher addresses).

<CMOVE в стандарте Forth-79 (англ.)

<CMOVE         addr1 addr2 n --                    "reverse-c-move"
    Copy  n bytes beginning at addr1 to addr2.   The move proceeds
    within the bytes from high memory toward low memory.

История

В 1983 году слово <CMOVE было переименовано в CMOVE> — лучше отражающее направление и способ перемещения участка памяти.

В таком виде слово и вошло в Каллисто.

Реализация

Слово CMOVE> в ФОРТ-ЕС было примитивом. Вот его описание и определение:

CMOVE>    A1,A2,U-> ПЕРЕСЛАТЬ U БАЙТОВ ОТ АДРЕСА А1             21
          ПО АДРЕСУ А2 НАЧИНАЯ С БОЛЬШИХ АДРЕСОВ

                     Экран номер 21
( 31.03.86       CMOVE   CMOVE> )

CODE CMOVE> ( A1,A2,U->) 14 LHRW12 BAL, RW2 RMASK NR, 1 =F  BZ,
 RW1 РМASК NR, RW1 RFORTH AR, RW1 0 BCTR,
 1 FIRST 4 +(,  LH,  1 RMASK NR, 1 RFORTH AR,  1 0 BCTR,
 DO, 0 0 (, 1 RM2 1C, 0 0 (, RW1 RW2 STC, RW2  LOOPBCT,
1 =H  RSTACK 6 (, 0 RSTACK LA,  RNEXT BR, END-CODE

Ссылки


  Это заготовка статьи. Вы можете помочь проекту, дополнив её.