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

Материал из ПМК вики
Перейти к навигации Перейти к поиску
 
(не показано 7 промежуточных версий этого же участника)
Строка 1: Строка 1:
'''COUNT''' (подсчёт, счётчик) — стандартное слово [[Каллисто]].
'''COUNT''' (подсчёт, счётчик) — стандартное слово [[Каллисто]].
  COUNT          ( a -- a1 u )                  Подсчёт. Даёт адрес a1 и длину u строки со счётчиком a.
  COUNT          ( a -- a1 U )                  Подсчёт. Даёт адрес a1 и длину U строки со счётчиком a.
[[Файл:address.gif|thumb|right|285px|[[Стек данных|Стек]] до работы COUNT<br>Картинка из книги Лео Броди «Starting FORTH»]]
[[Файл:address.gif|thumb|right|285px|[[Стек данных|Стек]] до работы COUNT<br>Картинка из книги Лео Броди «Starting FORTH»]]
[[Файл:addressp1.gif|thumb|right|287px|[[Стек данных|Стек]] после работы COUNT<br>Картинка из книги Лео Броди «Starting FORTH»]]
[[Файл:addressp1.gif|thumb|right|287px|[[Стек данных|Стек]] после работы COUNT<br>Картинка из книги Лео Броди «Starting FORTH»]]
Строка 16: Строка 16:
             символах строки в c-addr2.
             символах строки в c-addr2.


== COUNT в предыдущем стандарте Forth-83 (англ.) ==
== История ==
=== COUNT в предыдущем стандарте Forth-83 (англ.) ===
       COUNT        addr1 -- addr2 +n            79
       COUNT        addr1 -- addr2 +n            79
           addr2 is addr1+1 and +n is the length of the counted string
           addr2 is addr1+1 and +n is the length of the counted string
Строка 22: Строка 23:
           Range of +n is {0.255}  See:  "string, counted"
           Range of +n is {0.255}  See:  "string, counted"


== COUNT в стандарте Forth-79 (англ.) ==
=== COUNT в стандарте Forth-79 (англ.) ===
  COUNT          addr -- addr+1 n              159
  COUNT          addr -- addr+1 n              159
     Leave  the  address  addr+1 and the character  count  of  text
     Leave  the  address  addr+1 and the character  count  of  text
Строка 28: Строка 29:
     character count n.  Range of n is {0..255}.
     character count n.  Range of n is {0..255}.


== COUNT в fig-FORTH Release 1 glossary, май 1979 (англ.) ==
=== COUNT в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
  COUNT          addr1 --- addr2 n            L0
  COUNT          addr1 --- addr2 n            L0
         Leave the byte address addr2 and byte count n of a message text
         Leave the byte address addr2 and byte count n of a message text
Строка 37: Строка 38:


== Реализация ==
== Реализация ==
<pre>
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@
</pre>
Реализация из SP-Forth 4.20:
<pre>
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
</pre>
=== Советская реализация ===
Юрий Семёнов приводит следующее определение слова COUNT (стр. 36):
Юрий Семёнов приводит следующее определение слова COUNT (стр. 36):
  : COUNT  ( a -- a+1 # )  ↑ 1+  ↔ C@ ;
  : COUNT  ( a -- a+1 # )  ↑ 1+  ↔ C@ ;
Строка 57: Строка 82:


== Ссылки ==
== Ссылки ==
* {{Исходник|COUNT|COUNT}}
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0980 COUNT] в стандарте ANS Forth ''(англ.)''
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0980 COUNT] в стандарте ANS Forth ''(англ.)''
* Слово [http://www.forth200x.org/documents/html3/core/COUNT.html COUNT] в черновике Forth 200x ''(англ.)''
* Слово [http://forth-standard.org/standard/core/COUNT COUNT] в черновике Forth 200x ''(англ.)''
* [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\10.WWOD-WYWOD ВВОД-ВЫВОД] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»]
* [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\10.WWOD-WYWOD ВВОД-ВЫВОД] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»]
* [http://www.forth.com/starting-forth/sf10/sf10.html I/O and You] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''
* [http://www.forth.com/starting-forth/sf10/sf10.html I/O and You] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''
Строка 67: Строка 93:
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто]]
[[Категория:Слова высокого уровня]]
[[Категория:Слова высокого уровня]]
[[Категория:Стандартные слова]]
[[Категория:1994 CORE]]
[[Категория:2012 CORE]]

Текущая версия от 16:52, 10 ноября 2017

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

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


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


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