COUNT

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

COUNT (подсчёт, счётчик) — стандартное слово Каллисто.

COUNT          ( a -- a1 U )                   Подсчёт. Даёт адрес a1 и длину U строки со счётчиком a.
Стек до работы COUNT
Картинка из книги Лео Броди «Starting FORTH»
Стек после работы COUNT
Картинка из книги Лео Броди «Starting FORTH»

Кладёт в стек адрес первой литеры a1 и число литер u строки со счётчиком a.

Ввод слова COUNT[править]

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

COUNT в стандарте ANS Forth[править]

6.1.0980   COUNT                                                           CORE
           ( c-addr1 -- c-addr2 u )
           Возвращает спецификацию символьной строки для строки со счетчиком 
           сохраненной в c-addr1.   c-addr2 - адрес первого символа после c-
           addr1. u - содержимое символа в c-addr1, который является длиной в 
           символах строки в c-addr2.

История[править]

COUNT в предыдущем стандарте Forth-83 (англ.)[править]

     COUNT        addr1 -- addr2 +n             79
          addr2 is addr1+1 and +n is the length of the counted string
          at addr1.  The byte at addr1 contains the byte count +n.
          Range of +n is {0.255}  See:  "string, counted"

COUNT в стандарте Forth-79 (англ.)[править]

COUNT          addr -- addr+1 n              159
    Leave  the  address  addr+1 and the character  count  of  text
    beginning  at addr.   The first byte at addr must contain  the
    character count n.  Range of n is {0..255}.

COUNT в fig-FORTH Release 1 glossary, май 1979 (англ.)[править]

COUNT          addr1 --- addr2 n             L0
       Leave the byte address addr2 and byte count n of a message text
       beginning at address addr1. It is presumed that the first byte at
       addr1 contains the text byte count and the actual text starts with
       the second byte.
       Typically COUNT is followed by TYPE.

Реализация[править]

3094 ;#COUNT
3095 ; COUNT            ( a −− a1 U )                        Подсчитать. Дать адрес a1 и длину U строки со счётчиком a.
3096 LCOUNT:         .DB     5
3097                 .TEXT   "COUNT"                         ; ( a −− a+1 u )
3098                 .DW     LBUILD                          ; Преобразовать строку со счётчиком в адрес−длина.
3099 COUNT:          .DW CALL, DUP,ONEP,SWAP,CAT, EXIT       ; DUP 1+ SWAP C@

Реализация из SP-Forth 4.20:

CODE COUNT ( c-addr1 -- c-addr2 u ) \ 94
\ Получить строку символов из строки со счетчиком c-addr1.
\ c-addr2 - адрес первого символа за c-addr1.
\ u - содержимое байта c-addr1, являющееся длиной строки символов,
\ начинающейся с адреса c-addr2.
     LEA EBP, -4 [EBP]
     LEA EDX, 1 [EAX]
     MOVZX EAX, BYTE [EAX]
     MOV [EBP], EDX
     RET
END-CODE

Советская реализация[править]

Юрий Семёнов приводит следующее определение слова COUNT (стр. 36):

: COUNT  ( a -- a+1 # )   ↑ 1+  ↔ C@ ;

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

COUNT     Т->А,N ДАТЬ АДРЕС ПЕРВОЙ ЛИТЕРЫ И ЧИСЛО               28
          ЛИТЕР N СТРОКИ СО СЧЕТЧИКОМ Т

                     Экран номер 28
( 31.03.86 LIT" COUNT ," " ". (."/ ." C" ( ,( QUIT ABORT )

: COUNT ( T->A,N)  DUP 1+ SWAP C@ 2DUP + С@ IF 1+ THEN ;

Определение слова COUNT в FORTH ИТЭФ:

             HEAD    205Q,'COUN',324Q,COUNT,$COL          ; COUNT
             DW  DUBL,ONEP,SWAP,CAT,SEMI

Ссылки[править]


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


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