CMOVE
CMOVE (переслать) — стандартное слово Каллисто.
CMOVE ( a1 a2 u −− ) Копировать u байтов из a1 в a2.
Копирует побайтно область памяти размером u байт начиная с a1 и записывает её начиная с a2.
Сперва копируем содержимое байта с адресом a1, продолжаем в сторону больших адресов. Мы считаем, что блок не пересекает границ адресных пространств.
Ввод слова 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
Ссылки
- Исходный текст слова CMOVE в Каллисто Классик 1.0
- См. также слова CMOVE> FILL ERASE BLANK
- Слово CMOVE (c-move) и комментарии к нему в стандарте ANS Forth (англ.)
- Слово CMOVE (c-move) и комментарий к нему в черновике Forth 200x (англ.)
- ВВОД-ВЫВОД в книге Л.Броуди «Начальный курс программирования на языке Форт»
- I/O and You в книге Leo Brodie Starting Forth (англ.)
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |