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

Материал из ПМК вики
Перейти к навигации Перейти к поиску
 
(не показано 12 промежуточных версий этого же участника)
Строка 1: Строка 1:
'''DEPTH''' (глубина, читается «дэпф») — стандартное слово [[Каллисто]].
'''DEPTH''' (глубина, читается «дэпф») — стандартное слово [[Каллисто]]. Размер [[Стек данных|стека]].
  DEPTH          ( -- u )                       Глубина стека. u — количество значений на стеке данных.
  DEPTH          ( −− U )                             Глубина стека.
Выдаёт в [[Стек данных|стек]] полное количество чисел, хранившихся в [[Стек данных|стеке]] до исполнения этой команды.
                                                    U −− количество значений на стеке данных до исполнения DEPTH.
[[Файл:dSDepthPickRot.png|thumb|right|264px|Пример работы слова DEPTH]]
Кладёт на [[Стек данных|стек]] число элементов [[Стек данных|стека]] до исполнения этой команды.


== Ввод слова DEPTH ==
== Ввод слова DEPTH ==
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша K|{{Синяя клавиша|K}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша 6|{{Серая клавиша|6}}]] [[Клавиша 2|{{Серая клавиша|2}}]] [[Клавиша ПП|{{Чёрная клавиша|ПП}}]]
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите клавиши [[Клавиша K|{{Синяя клавиша|K}}]] [[Клавиша ИП|{{Чёрная клавиша|ИП}}]] [[Клавиша 6|{{Серая клавиша|6}}]] [[Клавиша 2|{{Серая клавиша|2}}]] [[Клавиша ПП|{{Чёрная клавиша|ПП}}]]


== DEPTH в стандарте ANS Forth ==
== DEPTH и FDEPTH в стандарте ANS Forth ==
<pre>
  6.1.1200  DEPTH                                                          CORE
  6.1.1200  DEPTH                                                          CORE
             ( -- +n )
             ( -- +n )
Строка 12: Строка 15:
             данных перед тем, как +n было помещено на стек.
             данных перед тем, как +n было помещено на стек.


== FDEPTH в стандарте ANS Forth ==
  12.6.1.1497  FDEPTH                  "f-depth"                        FLOATING
  12.6.1.1497  FDEPTH                  "f-depth"                        FLOATING
             ( -- +n )
             ( -- +n )
Строка 19: Строка 21:
             стеке данных, +n является текущим числом возможных значений с  
             стеке данных, +n является текущим числом возможных значений с  
             плавающей точкой, содержащихся на стеке данных.
             плавающей точкой, содержащихся на стеке данных.
</pre>


== DEPTH в предыдущем стандарте Forth-83 (англ.) ==
== История ==
В Форте FSP88M это слово известно под именем DPT
 
Английское слово [http://www.lingvo-online.ru/ru/Translate/en-ru/depth depth] означает «глубина».
 
=== DEPTH в предыдущем стандарте Forth-83 (англ.) ===
       DEPTH        -- +n                        79
       DEPTH        -- +n                        79
           +n is the number of 16-bit values contained in the data
           +n is the number of 16-bit values contained in the data
           stack before +n was placed on the stack.
           stack before +n was placed on the stack.


== DEPTH в стандарте Forth-79 (англ.) ==
=== DEPTH в стандарте Forth-79 (англ.) ===
  DEPTH          -- n                          238
  DEPTH          -- n                          238
     Leave the number of the quantity of 16-bit values contained in
     Leave the number of the quantity of 16-bit values contained in
     the data stack, before n added.
     the data stack, before n added.


== История ==
== Реализация ==
В Форте FSP88M это слово известно под именем DPT
<pre>
3907 ;#DEPTH
3908 ; DEPTH            ( −− U )                            Глубина стека. U −− количество значений на стеке данных до исполнения DEPTH.
3909 LDEPTH:        .DB    5
3910                .TEXT  "DEPTH"                ; ( −− глубина )
3911                .DW    LCOPY                  ; Положить на стек полное количество чисел, хранившихся на стеке до исполнения DEPTH
3912 DEPTH:          .DW CALL, SZERO,UAT, SPAT,ONEP,SUB, EXIT
</pre>
Реализации из SP-Forth 4.20:
<pre>
: DEPTH ( -- +n ) \ 94
\ +n - число одинарных ячеек, находящихся на стеке данных перед
\ тем как туда было помещено +n.
  SP@ S0 @ - NEGATE  1 CELLS /
\ значение может быть отрицательным, поэтому '>CELLS' вместо '/' нельзя 
;
</pre>
<pre>
CODE FDEPTH  \ *
      LEA EBP, -4 [EBP]
      MOV [EBP], EAX
      FSTSW EAX
      SHR  EAX, # 0B
      AND  EAX, # 7
      JZ  SHORT @@1
      NEG  EAX
      LEA  EAX, 8 [EAX]
@@1:  RET
END-CODE
 
\ Стек завернут в кольцо!!!
\ Нумерация регистров в сопроцессоре, видимо, следующая (experimental)
\        0 7 6 5 4 3 2 1 , где 0 - дно стека
\ FSTSW возвращает номер регистра
\ Пришлось это обработать...
</pre>


== Реализация ==
=== Советская реализация ===
Юрий Семёнов приводит следующее определение слова DEPTH (стр. 151):
Юрий Семёнов приводит следующее определение слова DEPTH (стр. 151):
   : DEPTH  S0 @ SP@ 2+ - 2/ ;
   : DEPTH  S0 @ SP@ 2+ - 2/ ;
Строка 53: Строка 96:


== Ссылки ==
== Ссылки ==
* {{Исходник|DEPTH|DEPTH}}
* Слова [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.1200 DEPTH] и [http://forth.sourceforge.net/standard/dpans/dpans12.htm#12.6.1.1497 FDEPTH (f-depth)] в стандарте ANS Forth ''(англ.)''
* Слова [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.1200 DEPTH] и [http://forth.sourceforge.net/standard/dpans/dpans12.htm#12.6.1.1497 FDEPTH (f-depth)] в стандарте ANS Forth ''(англ.)''
* Слова [http://www.forth200x.org/documents/html3/core/DEPTH.html DEPTH] и [http://www.forth200x.org/documents/html3/floating/FDEPTH.html FDEPTH (f-depth)] в черновике Forth 200x ''(англ.)''
* Слова [http://forth-standard.org/standard/core/DEPTH DEPTH] и [http://forth-standard.org/standard/float/FDEPTH FDEPTH (f-depth)] в черновике Forth 200x ''(англ.)''




{{нет иллюстраций}}
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто]]
[[Категория:Слова высокого уровня]]
[[Категория:Слова высокого уровня]]
[[Категория:Стековые манипуляции Каллисто]]
[[Категория:Стековые манипуляции Каллисто]]
[[Категория:Средства отладки Каллисто]]
[[Категория:Средства отладки Каллисто]]
[[Категория:Стандартные слова]]
[[Категория:1994 CORE]]
[[Категория:2012 CORE]]

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

DEPTH (глубина, читается «дэпф») — стандартное слово Каллисто. Размер стека.

DEPTH          ( −− U )                             Глубина стека.
                                                    U −− количество значений на стеке данных до исполнения DEPTH.
Пример работы слова DEPTH

Кладёт на стек число элементов стека до исполнения этой команды.

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

В режиме ЛАТ последовательно нажмите клавиши  K   ИП   6   2   ПП 

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

 6.1.1200   DEPTH                                                           CORE
            ( -- +n )
            +n - количество одно-ячеечных значений, содержавшихся на стеке 
            данных перед тем, как +n было помещено на стек.

 12.6.1.1497   FDEPTH                  "f-depth"                        FLOATING
            ( -- +n )
            +n - число значений, содержащихся на отделенном по умолчанию стеке 
            с плавающей точкой. Если числа с плавающей точкой сохраняются на 
            стеке данных, +n является текущим числом возможных значений с 
            плавающей точкой, содержащихся на стеке данных.

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

В Форте FSP88M это слово известно под именем DPT

Английское слово depth означает «глубина».

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

     DEPTH        -- +n                         79
          +n is the number of 16-bit values contained in the data
          stack before +n was placed on the stack.

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

DEPTH          -- n                          238
    Leave the number of the quantity of 16-bit values contained in
    the data stack, before n added.

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

3907 ;#DEPTH
3908 ; DEPTH            ( −− U )                             Глубина стека. U −− количество значений на стеке данных до исполнения DEPTH.
3909 LDEPTH:         .DB     5
3910                 .TEXT   "DEPTH"                 ; ( −− глубина )
3911                 .DW     LCOPY                   ; Положить на стек полное количество чисел, хранившихся на стеке до исполнения DEPTH
3912 DEPTH:          .DW CALL, SZERO,UAT, SPAT,ONEP,SUB, EXIT

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

: DEPTH ( -- +n ) \ 94
\ +n - число одинарных ячеек, находящихся на стеке данных перед
\ тем как туда было помещено +n.
  SP@ S0 @ - NEGATE  1 CELLS /
\ значение может быть отрицательным, поэтому '>CELLS' вместо '/' нельзя  
;
CODE FDEPTH  \ *
       LEA EBP, -4 [EBP]
       MOV [EBP], EAX
       FSTSW EAX
       SHR  EAX, # 0B
       AND  EAX, # 7
       JZ   SHORT @@1
       NEG  EAX
       LEA  EAX, 8 [EAX]
@@1:   RET
END-CODE

\ Стек завернут в кольцо!!!
\ Нумерация регистров в сопроцессоре, видимо, следующая (experimental)
\        0 7 6 5 4 3 2 1 , где 0 - дно стека
\ FSTSW возвращает номер регистра
\ Пришлось это обработать...

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

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

 : DEPTH   S0 @ SP@ 2+ - 2/ ;

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

DEPTH       ->+N      КОЛИЧЕСТВО ЗНАЧЕНИИ НА СТЕКЕ ДО +N   20

                     Экран номер 20
( 31.03.86    SP@ SP! RP@ RP! 2/ 2* 2@ 2! DEPTH )

: DEPTH ( ->+N)  SP@ S0 @ SWAP - 2/ ;

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

             HEAD    205Q,'DEPT',310Q,DEPTH,$COL          ; DEPTH
             DW  SZERO,AT,SPAT,TWOP,SUB,DIV2,SEMI

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