DEPTH

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Версия для печати больше не поддерживается и может содержать ошибки обработки. Обновите закладки браузера и используйте вместо этого функцию печати браузера по умолчанию.

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

Ссылки