FILL

Материал из ПМК вики
Перейти к навигации Перейти к поиску

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

FILL           ( a u c −− )                         Заполнить. Записать u байтов c, начиная с адреса a.

Слово FILL записывает u байт c в память, начиная с адреса a. Универсальный оператор для заполнения массивов памяти идентичными символами. На основе слова FILL реализованы специализированные слова ERASE и BLANK, заполняющие области памяти нулями и пробелами.

Ввод слова FILL

В режиме ЛАТ последовательно нажмите четыре клавиши  П   7       

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

6.1.1540   FILL                                                            CORE
           ( c-addr u char -- )
           Если u больше чем нуль, сохраняет char в каждом из u 
           последовательных символов в памяти, начинающейся с c-addr.

История

Слово FILL пришло в Каллисто из Форта, где оно является древним и стабильным. В существующем ныне виде слово FILL известно с 1979 года и входит во все стандарты.

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

     FILL         addr u 8b --                  83
          u bytes of memory beginning at addr are set to 8b.  No
          action is taken if u is zero.

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

FILL           addr n byte --                234
    Fill  memory beginning at address with a sequence of n  copies
    of  byte.   If the quantity n is less than or equal  to  zero,
    take no action.

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

FILL addr quan b --
       Fill memory at the address with the specified quantity of bytes b.

Реализация

2000 ;#FILL
2001 ; FILL             ( a U c −− )                         Заполнить. Записать U байтов c, начиная с адреса a.
2002 ; Записать U байт c в память начиная с адреса a
2003 ; Заполнить массив памяти идентичными литерами.
2004 ; а − адрес первого байта памяти, куда будет засылаться байт c
2005 ; U − число заполняемых байтов
2006 ; Подразумевается, что граница памяти программ и данных не пересекается.
2007 LFILL:          .DB     4
2008                 .TEXT   "FILL"                  ; ( куда сколько что −− )
2009                 .DW     LCMOVEG
2010 FILL:           .DW     JFILL
2011 JFILL:          PKRM03 MB                       ; Литера
2012                 RM3 1 + 
2013 JFILL2:         M8 1 + MA  1 + M3
2014                 KRM8 M0 +/−  KX<09              ; Счётчик литер
2015                 KRMA 1 EE 4 −  KX>=09  1 − M5 RMB
2016 FILL1:          KM5  FL0 FILL1
2017                 KGOTO9

Советская реализация

Описание и определение слова FILL в ядре ФОРТ-ЕС:

FILL      A,U,C-> ЗАСЛАТЬ С В U БАЙТОВ ПО АДРЕСУ А              22

                     Экран номер 22
( 31.03.86   FILL ERASE BLANK COMPILE [ ] MIN MAX HEX DECIMAL)

: FILL   ( A,U,C->) SWAP ?DUP IF >R OVER C!
     DUP 1+ R> 1- CMOVE EXIT THEN 2DROP ;

В FORTH ИТЭФ слово FILL было примитивом, который частично опирался на код примитива DROP, вот их определения:

            HEAD     204Q,'DRO',320Q,DROP                 ; DROP
   DRP:     ADD  SP, 2
            NEXT
            ...
            HEAD     204Q,'FIL',314Q,FILL                 ; FILL
            POP  AX      ; Символ
   FLL:     POP  CX      ; Счетчик символов
            CMP  CX, 0
            JLE  DRP     ;
            POP  BX
   $REPE:   MOV  BYTE PTR [BX],  AL
            INC  BX

            LOOP $REPE
            NEXT

Ссылки


  У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их.


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