Текущая версия |
Ваш текст |
Строка 1: |
Строка 1: |
| '''2DUP''' (два-дублировать, читается «два-дуп») — стандартное слово [[Каллисто]]. Продублировать пару [[Десятичное число|чисел]] в [[Стек данных|стеке]]. | | '''2DUP''' — стандартное слово [[Каллисто]]. |
| 2DUP ( y x -- y x y x ) Дублировать пару чисел.
| |
| [[Файл:CallistoMAXMIN2DUP.png|thumb|right|264px|Пример работы слова 2DUP]]
| |
| Дублирует верхнюю пару [[Ячейка (Каллисто)|ячеек]] y x в [[Стек данных|стеке]].
| |
| | |
| == Ввод слова 2DUP ==
| |
| В [[Режим NUM|режиме NUM]] последовательно нажмите клавиши [[Клавиша 2|{{Серая клавиша|2}}]] [[Клавиша Р-ГРД-Г|{{Чёрная клавиша|Р-ГРД-Г}}]] [[Клавиша K|{{Синяя клавиша|K}}]] [[Клавиша 3|{{Серая клавиша|3}}]] [[Клавиша 6|{{Серая клавиша|6}}]]
| |
| | |
| Для возврата в [[режим NUM]] нажмите [[Клавиша P|синюю клавишу {{Синяя клавиша|P}}]].
| |
| | |
| == 2DUP в стандарте ANS Forth ==
| |
| 6.1.0380 2DUP "two-dupe" CORE
| |
| ( x1 x2 -- x1 x2 x1 x2 )
| |
| Дублирует пару-ячеек x1 x2.
| |
| | |
| == История ==
| |
| 2DUP — устоявшееся слово в Форте, название и поведение которого не менялось с 1979 года.
| |
| | |
| В [[Каллисто]] редко возникает необходимость в числовых парах. Слово 2DUP присутствует для жонглирования стеком, но используется реже, чем в классическом Форте.
| |
| | |
| === 2DUP в предыдущем стандарте Forth-83 (англ.) ===
| |
| 2DUP 32b -- 32b 32b 79 "two-dupe"
| |
| Duplicate 32b.
| |
| | |
| === 2DUP в стандарте Forth-79 (англ.) ===
| |
| 2DUP d -- d d "two-dupe"
| |
| Duplicate the top double number on the stack.
| |
| | |
| == Реализация ==
| |
| В [[Каллисто|Каллисто 1.0]] для экономии [[Память программ|памяти программ]] редко используемое слово 2DUP реализовано через [[примитив]] [[OVER]]:
| |
| <pre>
| |
| 1919 ;#TwoDUP
| |
| 1920 ; 2DUP ( y x −− y x y x ) Дублировать пару чисел.
| |
| 1921 LDUP2: .DB 4
| |
| 1922 .TEXT "2DUP" ; ( dd −− dd dd )
| |
| 1923 .DW LQDUP
| |
| 1924 DUP2: .DW CALL, OVER,OVER, EXIT ; Дублировать верхнюю пару элементов стека.
| |
| </pre>
| |
| Красиво это можно записать так:
| |
| : 2DUP ( dd -- dd dd) OVER OVER ;
| |
| | |
| Реализация из SP-Forth 4.20:
| |
| <pre>
| |
| CODE 2DUP ( x1 x2 -- x1 x2 x1 x2 ) \ 94
| |
| \ Продублировать пару ячеек x1 x2.
| |
| MOV EDX, [EBP]
| |
| MOV -4 [EBP], EAX
| |
| MOV -8 [EBP], EDX
| |
| LEA EBP, -8 [EBP]
| |
| RET
| |
| END-CODE
| |
| </pre>
| |
| | |
| === Советская реализация ===
| |
| В ФОРТ-ЕС слово 2DUP так и было определено, с целью лёгкой переносимости ядра:
| |
| <PRE>
| |
| 2DUP WD->WD,WD ПРОДУБЛИРОВАТЬ ДВОЙНОЕ ЗНАЧЕНИЕ 12
| |
| | |
| Экран номер 12
| |
| ( 31.03.86 ROLL PICK 2DUP 2DROP 2SWAP 2OVER 2ROT )
| |
| | |
| : 2DUP ( WD->WD,WD) OVER OVER ;
| |
| </PRE>
| |
| В FORTH ИТЭФ слово 2DUP было [[примитив]]ом, вот его определение:
| |
| <PRE>
| |
| HEAD 204Q,'2DU',320Q,DUP2 ; 2DUP
| |
| POP AX
| |
| POP CX
| |
| PUSH CX
| |
| PUSH AX
| |
| PUSH CX
| |
| PUSH AX
| |
| NEXT
| |
| </PRE>
| |
| | |
| == Ссылки ==
| |
| * {{Исходник|TwoDUP|2DUP}}
| |
| * См. слова [[Слово ↑|↑]], [[2DROP]], [[2SWAP]]
| |
| * Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0380 2DUP (two-dupe)] в стандарте ANS Forth ''(англ.)''
| |
| * Слово [http://forth-standard.org/standard/core/TwoDUP 2DUP (two-dupe)] в черновике 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] ''(англ.)''
| |
| | |
|
| |
|
| | {{нет иллюстраций}} |
| {{заготовка}} | | {{заготовка}} |
| [[Категория:Слова Каллисто]] | | [[Категория:Слова Каллисто]] |
| [[Категория:Стековые манипуляции Каллисто]] | | [[Категория:Стековые манипуляции Каллисто]] |
| [[Категория:Стандартные слова]]
| |
| [[Категория:1994 CORE]]
| |
| [[Категория:2012 CORE]]
| |