OVER

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

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

OVER           ( y x -- y x y )                Дублировать второе сверху.
Выполнение слова OVER
Картинка из книги Лео Броди «Starting FORTH»

Дублирует значение, лежащее на стеке непосредственно под верхним.

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

В режиме ЛАТ последовательно нажмите четыре клавиши  5      ИП   × 

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

 6.1.1990   OVER                                                            CORE
            ( x1 x2 -- x1 x2 x1 )
            Помещает копию x1 на вершине стека.

 12.6.1.1600   FOVER                     "f-over"                       FLOATING
            ( F: r1 r2 -- r1 r2 r1 ) or ( r1 r2 -- r1 r2 r1 )
            Помещает копию r1 на вершину стека с плавающей точкой.

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

В Форте слово OVER одно из самых древних и устоявшихся.

В 1968 году Чак Мур работал в Mohasco Industries, Inc (Amsterdam NY, англ.). Первая версия интерпретатора, получившая название FORTH, заработала на миникомпьютере IBM 1130 с графическим дисплеем IBM 2250 (16-битный процессор с ОЗУ 8К, дисководом, клавиатурой, принтером и ридером/панчером перфокарт). Первый FORTH знал слово OVER

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

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

     OVER         16b1 16b2 -- 16b1 16b2 16b3   79
          16b3 is a copy of 16b1.

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

OVER           n1 n2 -- n1 n2 n1             170
    Leave a copy of the second number on the stack.

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

OVER           nl n2 --- nl n2 n1            L0
       Copy the second stack value, placing it as the new top.

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

В Каллисто 1.0 слово OVER реализовано, как примитив:

1874 ;#OVER
1875 ; OVER             ( y x −− y x y )                     Дублировать второй сверху.
1876 LOVER:          .DB     4
1877                 .TEXT   "OVER"                  ; ( a b −− a b a )
1878                 .DW     LPICK
1879 OVER:           .DW     JOVER
1880 JOVER:          RM3 M5  KRM5 KM3  KGOTO9        ; Копировать 2−й сверху элемент стека и занести его наверх.

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

: OVER  ( x1 x2 -- x1 x2 x1)   1 PICK ;

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

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

CODE OVER ( x1 x2 -- x1 x2 x1 ) \ 94
\ Положить копию x1 на вершину стека.
     LEA EBP, -4 [EBP]
     MOV [EBP], EAX
     MOV EAX, 4 [EBP]
     RET
END-CODE
CODE FOVER  \ *
       FLD ST(1)
       RET
END-CODE

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

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

OVER         W1,W2->W1,W2,W1 ПРОДУБЛИРОВАТЬ ВТОРОЕ СВЕРХУ        9

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

CODE OVER ( W1,W2->W1,W2,W1) RW1 SECOND LH, PUSHRW1 B, END-CODE

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

            HEAD     204Q,'OVE',322Q,OVER                 ; OVER
            MOV  BX, SP
	    PUSH SS:[BX]+2
            NEXT

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


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