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

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Нет описания правки
Строка 1: Строка 1:
'''CMOVE''' (переслать) — стандартное слово [[Каллисто]].
CMOVE          ( a1 a2 u −− )                      Копировать u байтов из a1 в a2.
[[Файл:cmove.gif|thumb|right|153px|Использование cmove ( addr1 addr2 u -- ).<br>Картинка из книги Лео Броди «Starting FORTH»]]
[[Файл:cmove.gif|thumb|right|153px|Использование cmove ( addr1 addr2 u -- ).<br>Картинка из книги Лео Броди «Starting FORTH»]]
'''CMOVE''' (переслать) — стандартное слово [[Каллисто]].
Копирует побайтно область памяти размером u байт начиная с a1 и записывает её начиная с a2.
Копирует побайтно область памяти размером u байт начиная с a1 и записывает её начиная с a2.


Строка 84: Строка 84:


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

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

CMOVE (переслать) — стандартное слово Каллисто.

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

Копирует побайтно область памяти размером u байт начиная с a1 и записывает её начиная с a2.

Ввод слова CMOVE

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

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

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

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

     CMOVE        addr1 addr2 u --              83            "c-move"
          Move u bytes beginning at address addr1 to addr2.  The byte
          at addr1 is moved first, proceeding toward high memory.  If
          u is zero nothing is moved.

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

CMOVE          addr1 addr2 n --              153           "c-move"
    Move  n  bytes  beginning  at address  addr1  to  addr2.   The
    contents  of  addr1  is moved  first  proceeding  toward  high
    memory.  If n is zero nothing is moved.

CMOVE в fig-FORTH Release 1 glossary, май 1979 (англ.)

CMOVE from to count --
       Move the specified quantity of bytes beginning at address from to
       address to. The contents of address from is moved first proceeding
       toward high memory. Further specification is necessary on word
       addressing computers.

Реализация

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

CMOVE     A1,A2,U-> ПЕРЕСЛАТЬ U БАЙТОВ ОТ А1 В А2               21

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

CODE CMOVE ( A1,A2,U ->) 14 LHRW12 BAL, RW2 RMASK NR, 2 =F BZ,
 RW1 RMASK NR, RW1 RFORTH AR, 1 FIRST 4 +(, LH, 1 RMASK NR,
 1 RFORTH AR, 0 256 LA, 1 =F В,  BEGIN,   0 (, 256 RW1 ), 0 (, 1
 MVC, RW1 0 AR, 1 0 AR,
1 =Н RW2 0 SR, ?M UNTIL, RW2 0 BCTR,
 RW2 0 AR, ?NM IF, RW2 3 =F EX, THEN,
2 =H RSTACK 6 (, 0 RSTACK LA, RNEXT BR,
3 =H 0 (, 1 RW1 ), 0 (, 1 MVC,  END-CODE

В FORTH ИТЭФ слово CMOVE также было примитивом, вот его определение:

   ;        ** Работа с памятью **

            HEAD     205Q,'CMOV',305Q,CMOVE               ; CMOVE
            POP  CX         ; Счетчик
            CMP  CX,  0
            JLE  PRO
            MOV  AX,  DI     ; Сохранение содержимого DI,SI
            MOV  BX,  SI
            POP  DI          ; Куда
            POP  SI          ; Откуда
   REP      MOV  ES:  BYTE PTR [DI], DS:[SI]
            MOV  DI, AX      ; Восстановление DI,SI
            MOV  SI, BX
            NEXT

Ссылки


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