Слово ↑

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

(дублировать, читается «стрелка вверх») — адаптированное слово Каллисто. Продублировать верхний элемент стека.

↑              ( x -- x x )                    Дублировать.
Пример работы слова ↑

Дублирует вершину стека, добавляя в стек ещё одно значение, равное тому, которое было до этого верхним.

Ввод слова ↑

В режиме NUM нажмите белую клавишу  В↑ 

DUP и FDUP в стандарте ANS Forth

 6.1.1290   DUP                                   "dupe"                    CORE
            ( x -- x x )
            Дублирует x.

 12.6.1.1510   FDUP                     "f-dupe"                        FLOATING
            ( F: r -- r r ) or ( r -- r r )
            Дублирует r.

История

В Форте слово ↑ одно из самых древних и устоявшихся, но называется DUP, от английского duplicate — дублировать.

Впервые DUP появился в программе CURVE, написанной Чак Муром на Алголе для Burroughs B5500 в 1964 году (Национальная ускорительная лаборатория SLAC, Стэнфордский университет).

В 1970 году DUP был реализован Чаком Муром для 2К×48бит версии Форта на Burroughs B-5500 и в таком виде вошло во все стандарты Форта.

Более удобное короткое название ↑ досталось в наследство от советского ПМК «Электроника Б3-34», выпущенного в 1980 году. В Каллисто название DUP осталось в именах слов ?DUP и 2DUP.

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

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

     DUP          16b -- 16b 16b                79              "dupe"
          Duplicate 16b.

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

DUP            n -- n n                      205             "dupe"
    Leave a copy of the top stack number.

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

DUP           n  ---  n  n                     L0
       Duplicate the value on the stack.

Реализация

В Каллисто 1.0 слово ↑ является аналогом команды ЭКВМ В↑, но действует в стеке данных Каллисто:

1903 ;#DUP
1904 ; ↑                ( x −− x x )                         Дублировать.
1905 LDUP:           .DB     1,24
1906                 .DW     LDSWAP
1907 DUP:            .DW     JDUP
1908 JDUP:           PKRM03 KM3  KGOTO9              ; Дублировать верхний элемент стека.

В Каллисто слово ↑ реализовано, как примитив. Но при необходимости ↑ можно легко выразить через более мощное слово PICK:

: ↑  ( x -- x x)   0 PICK ;

Это определение верно и в Форте, начиная с Форта-83.

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

0 VALUE  'DUP_V
…
:  'DUP  'DUP_V ;
…
: 'DUP
  S" DUP" TC-FINDOUT TC-LIT, ; IMMEDIATE
' DUP  >VIRT CONSTANT  'DUP
\ ================================================================
\ Стековые манипуляции

CODE DUP ( x -- x x ) \ 94
\ Продублировать x.
     LEA EBP, -4 [EBP]
     MOV [EBP], EAX
     RET
END-CODE
CODE FDUP   \ *
       FLD ST(0)
       RET
END-CODE

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

Слово ↑ в ФОРТ-ЕС называлось DUP и было примитивом. Вот его описание и определение:

DUP       W->W,W ПРОДУБЛИРОВАТЬ ВЕРХНЕЕ ЗНАЧЕНИЕ                9

                      Экран номер 9
( 31.03.86   DUP ?DUP DROP SWAP OVER >R R> R@ RDROP ROT )

CODE DUP   ( W->W,W) RW1 PULL, PUSHRW1 B,   END-CODE

В FORTH ИТЭФ слово ↑ называлось DUP и также было примитивом, вот его определение:

            HEAD     203Q,'DU',320Q,DUBL                  ; DUP
            POP  AX

   DU:      PUSH AX
   C$:      PUSH AX
            NEXT

Ссылки


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