Текущая версия |
Ваш текст |
Строка 1: |
Строка 1: |
| '''2SWAP''' (два-обмен, читается «два-своп») — стандартное слово [[Каллисто]]. Обменять местами в [[Стек данных|стеке]] две верхних пары [[Ячейка (Каллисто)|ячеек]]. | | '''2SWAP''' (два-обменять) — стандартное слово [[Каллисто]]. |
| 2SWAP ( t z y x -- y x t z ) Обмен двух пар.
| |
| Меняет местами две верхние пары [[Десятичное число|чисел]] в [[Стек данных|стеке]].
| |
|
| |
|
| == Ввод слова 2SWAP ==
| | Меняет местами верхние две пары чисел в [[Стек данных|стеке]]. |
| В [[Режим NUM|режиме NUM]] последовательно нажмите клавиши [[Клавиша 2|{{Серая клавиша|2}}]] [[Клавиша Р-ГРД-Г|{{Чёрная клавиша|Р-ГРД-Г}}]] [[Клавиша 1|{{Серая клавиша|1}}]] [[Клавиша В↑|{{Серая клавиша|В↑}}]] {{ШГ←}} [[Клавиша 6|{{Серая клавиша|6}}]]
| |
|
| |
|
| Для возврата в [[режим NUM]] нажмите [[Клавиша P|синюю клавишу {{Синяя клавиша|P}}]].
| |
|
| |
|
| == 2SWAP в стандарте ANS Forth == | | == 2SWAP в стандарте ANS Forth == |
Строка 13: |
Строка 9: |
| Меняет местами две верхних пары-ячеек. | | Меняет местами две верхних пары-ячеек. |
|
| |
|
| == История ==
| |
| 2SWAP — устоявшееся слово в Форте, название и поведение которого не менялось с 1979 года.
| |
|
| |
|
| В [[Каллисто]] редко возникает необходимость в числовых парах, поэтому слово 2SWAP используется реже, чем в классическом Форте.
| | == 2SWAP в предыдущем стандарте Forth-83 (англ.) == |
| | |
| === 2SWAP в предыдущем стандарте Forth-83 (англ.) ===
| |
| 2SWAP 32b1 32b2 -- 32b2 32b1 79 "two-swap" | | 2SWAP 32b1 32b2 -- 32b2 32b1 79 "two-swap" |
| The top two double numbers are exchanged. | | The top two double numbers are exchanged. |
|
| |
|
| === 2SWAP в стандарте Forth-79 (англ.) ===
| | |
| | == 2SWAP в стандарте Forth-79 (англ.) == |
| 2SWAP d1 d2 -- d2 d1 "two-swap" | | 2SWAP d1 d2 -- d2 d1 "two-swap" |
| Exchange the top two double numbers on the stack. | | Exchange the top two double numbers on the stack. |
|
| |
|
| == Реализация ==
| |
| <pre>
| |
| 1891 ;#TwoSWAP
| |
| 1892 ; 2SWAP ( t z y x −− y x t z ) Обменять две пары.
| |
| 1893 LDSWAP: .DB 5
| |
| 1894 .TEXT "2SWAP" ; ( dd1 dd2 −− dd2 dd1 )
| |
| 1895 .DW LSWAP
| |
| 1896 DSWAP: .DW JDSWAP ; Поменять местами верхние две пары чисел в стеке.
| |
| 1897 JDSWAP: RM3 M8 2 + MA
| |
| 1898 KRMA KRM8 KMA <−> KM8
| |
| 1899 RM3 1 + M8 2 + MA
| |
| 1900 KRMA KRM8 KMA <−> KM8
| |
| 1901 KGOTO9
| |
| </pre>
| |
| Реализация из SP-Forth 4.20:
| |
| <pre>
| |
| CODE 2SWAP ( x1 x2 x3 x4 -- x3 x4 x1 x2 ) \ 94
| |
| \ Поменять местами две верхние пары ячеек.
| |
| MOV ECX, [EBP]
| |
| MOV EDX, 4 [EBP]
| |
| MOV EBX, 8 [EBP]
| |
| MOV 8 [EBP], ECX
| |
| MOV 4 [EBP], EAX
| |
| MOV [EBP], EBX
| |
| MOV EAX, EDX
| |
| RET
| |
| END-CODE
| |
| </pre>
| |
|
| |
| === Советская реализация ===
| |
| В ядре ФОРТ-ЕС слово 2SWAP было определено через [[примитив]] ROLL
| |
| <PRE>
| |
| 2SWAP WD1,WD2->WD2,WD1 ОБМЕНЯТЬ МЕСТАМИ ДВА 12
| |
| ВЕРХНИХ ДВОЙНЫХ ЗНАЧЕНИЯ
| |
|
| |
| Экран номер 12
| |
| ( 31.03.86 ROLL PICK 2DUP 2DROP 2SWAP 2OVER 2ROT )
| |
|
| |
| : 2SWAP ( WD1,WD2->WD2,WD1) 3 ROLL 3 ROLL ;
| |
| </PRE>
| |
| В FORTH ИТЭФ слово 2SWAP было [[примитив]]ом, вот его определение:
| |
| <PRE>
| |
| HEAD 205Q,'2SWA',320Q,DSWAP ; 2SWAP
| |
| POP AX
| |
| POP CX
| |
| MOV BX, SP
| |
| MOV DX,WORD PTR SS:[BX+2]
| |
| PUSH DX
| |
| MOV DX,WORD PTR SS:[BX]
| |
| PUSH DX
| |
| MOV WORD PTR SS:[BX],AX
| |
| MOV WORD PTR SS:[BX+2],CX
| |
| NEXT
| |
| </PRE>
| |
|
| |
|
| == Ссылки == | | == Ссылки == |
| * {{Исходник|TwoSWAP|2SWAP}} | | * [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0430 Слово 2SWAP (two-swap) в стандарте ANS Forth] ''(англ.)'' |
| * См. слова [[Слово ↔|↔]], [[2DUP]], [[2DROP]]
| | * [http://www.forth200x.org/documents/html/core.html#core:2SWAP Слово 2SWAP (two-swap) в черновике Forth 200x] ''(англ.)'' |
| * Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0430 2SWAP (two-swap)] в стандарте ANS Forth ''(англ.)''
| |
| * Слово [http://forth-standard.org/standard/core/TwoSWAP 2SWAP (two-swap)] в черновике Forth 200x ''(англ.)'' | |
| * [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\02.WYPOLNENIE%20ARIFMETITESKIH%20OPERAZIJ ВЫПОЛНЕНИЕ АРИФМЕТИЧЕСКИХ ОПЕРАЦИЙ] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»]
| |
| * [http://www.forth.com/starting-forth/sf2/sf2.html How to Get Results] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''
| |
|
| |
|
|
| |
|
Строка 93: |
Строка 28: |
| {{заготовка}} | | {{заготовка}} |
| [[Категория:Слова Каллисто]] | | [[Категория:Слова Каллисто]] |
| [[Категория:Примитивы]]
| |
| [[Категория:Стековые манипуляции Каллисто]] | | [[Категория:Стековые манипуляции Каллисто]] |
| [[Категория:Стандартные слова]]
| |
| [[Категория:1994 CORE]]
| |
| [[Категория:2012 CORE]]
| |