Слово ↔
↔ (обмен, двойная стрелка влево-вправо) — традиционное слово Каллисто. Переставить два верхних элемента стека.
↔ ( y x -- x y ) Обмен.
Меняет местами два верхних числа в стеке.
Ввод слова ↔[править]
В режиме NUM нажмите белую клавишу ↔
SWAP и FSWAP в стандарте ANS Forth[править]
6.1.2260 SWAP CORE ( x1 x2 -- x2 x1 ) Переставляет два верхних элемента стека. 12.6.1.1620 FSWAP "f-swap" FLOATING ( F: r1 r2 -- r2 r1 ) or ( r1 r2 -- r2 r1 ) Меняет два верхних элемента стека с плавающей точкой.
История[править]
В Форте слово ↔ одно из самых древних и устоявшихся, но называется SWAP (англ. обменять).
Впервые оно появилось в 1964 году под именем . в программе CURVE, написанной Чак Муром на Алголе для Burroughs B5500 (Национальная ускорительная лаборатория SLAC, Стэнфордский университет).
Более удобное короткое название ↔ досталось в наследство от советского ПМК «Электроника МК-54», выпущенного в 1982 году. В Каллисто название SWAP осталось в имени слова 2SWAP.
В Форте FSP88M слово ↔ известно под именем SW
SWAP в предыдущем стандарте Forth-83 (англ.)[править]
SWAP 16b1 16b2 -- 16b2 16b1 79 The top two stack entries are exchanged.
SWAP в стандарте Forth-79 (англ.)[править]
SWAP n1 n2 -- n2 n1 230 Exchange the top two stack values.
SWAP в fig-FORTH Release 1 glossary, май 1979 (англ.)[править]
SWAP nl n2 --- n2 n1 L0 Exchange the top two values On the stack.
Реализация[править]
В Каллисто 1.0 слово ↔ является аналогом команды ЭКВМ ↔, но действует в стеке данных Каллисто:
1882 ;#SWAP 1883 ; ↔ ( y x −− x y ) Обмен. 1884 LSWAP: .DB 1,183 ; ( a b −− b a ) 1885 .DW LOVER 1886 SWAP: .DW JSWAP 1887 JSWAP: RM3 M8 M5 1888 KRM5 KRM8 PKM05 <−> KM8 ; Поменять местами два верхних элемента стека. 1889 KGOTO9
Также можно предложить на проверку следующий код. Он на один шаг длиннее, зато на одну команду меньше и не использует R8. Возможно, за счёт этого примитив будет выполняться быстрее:
CODE ↔ ( y x -- x y ) ИП3 П5 КИП5 РКИП03 РКП05 ↔ РКП03 КБП9 END-CODE
Реализации из SP-Forth 4.20:
CODE SWAP ( x1 x2 -- x2 x1 ) \ 94 \ поменять местами два верхних элемента стека \ XCHG EAX, [EBP] MOV EDX, [EBP] MOV [EBP], EAX MOV EAX, EDX RET END-CODE
CODE FSWAP \ * FXCH RET END-CODE
Советская реализация[править]
Слово ↔ в ФОРТ-ЕС называлось SWAP и было примитивом. Вот его описание и определение:
SWAP W1,W2->W2,W1 ОБМЕНЯТЬ МЕСТАМИ 2 ВЕРХНИХ 9 Экран номер 9 ( 31.03.86 DUP ?DUP DROP SWAP OVER >R R> R@ RDROP ROT ) CODE SWAP ( W1,W2->W2,W1) 14 LHRW12 BAL, RW2 SECOND STH, PUTRW1 B, END-CODE
В FORTH ИТЭФ слово ↔ называлось SWAP и также было примитивом, вот его определение:
HEAD 204Q,'SWA',320Q,SWAP ; SWAP POP CX POP AX PUSH CX PUSH AX NEXT
Ссылки[править]
- Исходный текст слова ↔ в Каллисто Классик 1.0
- См. слова 2SWAP, ↑, DROP, OVER, ROT
- Слова SWAP и FSWAP (f-swap) в стандарте ANS Forth (англ.)
- Слова SWAP и FSWAP (f-swap) в черновике Forth 200x (англ.)
- ВЫПОЛНЕНИЕ АРИФМЕТИЧЕСКИХ ОПЕРАЦИЙ в книге Л.Броуди «Начальный курс программирования на языке Форт»
- How to Get Results в книге Leo Brodie Starting Forth (англ.)
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |