CMOVE〉: различия между версиями
Перейти к навигации
Перейти к поиску
AtH (обсуждение | вклад) |
AtH (обсуждение | вклад) Нет описания правки |
||
Строка 1: | Строка 1: | ||
'''CMOVE>''' — стандартное слово [[Каллисто]]. | |||
CMOVE> ( a1 a2 u −− ) Копировать u байтов из a1 в a2, начиная с больших адресов. | |||
[[Файл:cmoveup.gif|thumb|right|150px|Использование cmove> ( addr1 addr2 u -- ).<br>Картинка из книги Лео Броди «Starting FORTH»]] | [[Файл:cmoveup.gif|thumb|right|150px|Использование cmove> ( addr1 addr2 u -- ).<br>Картинка из книги Лео Броди «Starting FORTH»]] | ||
== Ввод слова CMOVE> == | == Ввод слова CMOVE> == | ||
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша С/П|{{Чёрная клавиша|С/П}}]] [[Клавиша ÷|{{Серая клавиша|÷}}]] [[Клавиша 5|{{Серая клавиша|5}}]] [[Клавиша ↔|{{Серая клавиша|↔}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша P|{{Синяя клавиша|P}}]] [[Клавиша F|{{Оранжевая клавиша|F}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] | В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша С/П|{{Чёрная клавиша|С/П}}]] [[Клавиша ÷|{{Серая клавиша|÷}}]] [[Клавиша 5|{{Серая клавиша|5}}]] [[Клавиша ↔|{{Серая клавиша|↔}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша P|{{Синяя клавиша|P}}]] [[Клавиша F|{{Оранжевая клавиша|F}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] | ||
Строка 62: | Строка 62: | ||
== Ссылки == | == Ссылки == | ||
* {{Исходник|CMOVEtop|CMOVE>}} | |||
* См. также слова [[CMOVE]] [[FILL]] [[ERASE]] [[BLANK]] | * См. также слова [[CMOVE]] [[FILL]] [[ERASE]] [[BLANK]] | ||
* Слово [http://forth.sourceforge.net/standard/dpans/dpans17.htm#17.6.1.0920 CMOVE> (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> (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>
В режиме ЛАТ последовательно нажмите клавиши С/П ÷ 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
Ссылки
- Исходный текст слова CMOVE> в Каллисто Классик 1.0
- См. также слова CMOVE FILL ERASE BLANK
- Слово CMOVE> (c-move-up) и комментарий к нему в стандарте ANS Forth (англ.)
- Слово CMOVE> (c-move-up) и комментарий к нему в черновике Forth 200x (англ.)
- ВВОД-ВЫВОД в книге Л.Броуди «Начальный курс программирования на языке Форт»
- I/O and You в книге Leo Brodie Starting Forth (англ.)
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |