Текущая версия |
Ваш текст |
Строка 1: |
Строка 1: |
| '''MAX''' (максимум) — стандартное слово [[Каллисто]]. Нахождение большего из двух [[Десятичное число|чисел]]. | | '''MAX''' — стандартное слово [[Каллисто]]. |
| MAX ( y x −− x1 ) Нахождение большего из двух чисел.
| |
| x1 := max (x, y)
| |
| [[Файл:CallistoMAXMIN2DUP.png|thumb|right|264px|Пример работы слова MAX]]
| |
| Слово MAX засылает в [[Стек данных|стек]] [[Десятичное число|число]] x1, которое является наибольшим из двух [[Десятичное число|чисел]] x и y.
| |
| | |
| == Ввод слова MAX ==
| |
| В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите три клавиши [[Клавиша ÷|{{Серая клавиша|÷}}]] {{ШГ←}} [[Клавиша 0|{{Серая клавиша|0}}]]
| |
| | |
| == MAX и FMAX в стандарте ANS Forth ==
| |
| <PRE>
| |
| 6.1.1870 MAX CORE
| |
| ( n1 n2 -- n3 )
| |
| n3 большее из n1 и n2.
| |
| | |
| 12.6.1.1562 FMAX "f-max" FLOATING
| |
| ( F: r1 r2 -- r3 ) or ( r1 r2 -- r3 )
| |
| r3 большее из r1 и r2.
| |
| </PRE>
| |
| | |
| == История ==
| |
| В [[Каллисто]] имя MAX восходит к надписи на клавиатуре советского ПМК [[Электроника МК-61|«Электроника МК-61»]], выпущенного в 1984 году.
| |
| | |
| === MAX в предыдущем стандарте Forth-83 (англ.) ===
| |
| MAX n1 n2 -- n3 79 "max"
| |
| n3 is the greater of n1 and n2 according to the operation of
| |
| > .
| |
| | |
| === MAX в стандарте Forth-79 (англ.) ===
| |
| MAX n1 n2 -- n3 218 "max"
| |
| Leave the greater of two numbers.
| |
| | |
| === MAX в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
| |
| MAX n1 n2 --- max L0
| |
| Leave the greater of two numbers.
| |
| | |
| == Реализация ==
| |
| В [[Каллисто|Каллисто 1.0]] слово MAX является «обёрткой» вокруг команды ЭКВМ [[К max]]:
| |
| <pre>
| |
| 1552 ;#MAX
| |
| 1553 ; MAX ( y x −− x1 ) Большее из двух чисел. x1 := max (x, y)
| |
| 1554 LMAX: .DB 3
| |
| 1555 .TEXT "MAX" ; ( a b −− max )
| |
| 1556 .DW LMIN
| |
| 1557 MAX: .DW JMAX
| |
| 1558 JMAX: RM3 MB 1 + MA M3
| |
| 1559 KRMB KRMA KMAX KMA ; Выделить максимум, обёртка вокруг K MAX.
| |
| 1560 KGOTO9
| |
| </pre>
| |
| Реализации из SP-Forth 4.20:
| |
| <pre>
| |
| CODE MAX ( n1 n2 -- n3 ) \ 94
| |
| \ n3 - большее из n1 и n2.
| |
| ARCH-P6 [IF]
| |
| MOV EDX, [EBP]
| |
| CMP EDX, EAX
| |
| CMOVG EAX, EDX
| |
| [ELSE]
| |
| CMP EAX, [EBP]
| |
| JL # ' DROP
| |
| [THEN]
| |
| LEA EBP, 4 [EBP]
| |
| RET
| |
| END-CODE
| |
| </pre>
| |
| <pre>
| |
| CODE FMAX \ *
| |
| MOV EBX, EAX
| |
| FCOM
| |
| FSTSW EAX
| |
| SAHF
| |
| JB SHORT @@1
| |
| FXCH
| |
| @@1: FFREE ST
| |
| FINCSTP
| |
| MOV EAX, EBX
| |
| RET
| |
| END-CODE
| |
| </pre>
| |
| | |
| === Советская реализация ===
| |
| Слово MAX в ФОРТ-ЕС было [[примитив]]ом. Вот его описание и определение:
| |
| <PRE>
| |
| МАХ N1,N2->N3 БОЛЬШЕЕ ИЗ ЧИСЕЛ N1 И N2 22
| |
| | |
| Экран номер 22
| |
| ( 31.03.86 FILL ERASE BLANK COMPILE [ ] MIN MAX HEX DECIMAL)
| |
| | |
| CODE MAX ( N1,N2->N3 ) 14 LHRM12 BAL, RW1 RW2 CR,
| |
| POP BNL, RW1 RW2 LR, POPPUT1 B, END-CODE
| |
| </PRE>
| |
| В FORTH ИТЭФ слово MAX также было [[примитив]]ом и опиралось на часть кода [[примитив]]а [[MIN]], вот их определения:
| |
| <PRE>
| |
| HEAD 203Q,'MI',316Q,MIN ; MIN
| |
| POP AX
| |
| POP CX
| |
| CMP CX, AX
| |
| JL DEEP
| |
| TOP: PUSH AX
| |
| NEXT
| |
| DEEP: PUSH CX
| |
| NEXT
| |
| | |
| HEAD 203Q,'MA',330Q,MAX ; MAX
| |
| POP AX
| |
| POP CX
| |
| CMP CX, AX
| |
| JGE DEEP
| |
| JMP TOP
| |
| </PRE>
| |
|
| |
|
| == Ссылки == | | == Ссылки == |
| * {{Исходник|MAX|MAX}} | | * [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.1870 Слово MAX в стандарте ANS Forth] ''(англ.)'' |
| * См. слово [[MIN]]
| | * [http://forth.sourceforge.net/standard/dpans/dpans12.htm#12.6.1.1562 Слово FMAX (f-max) в стандарте ANS Forth] ''(англ.)'' |
| * Слова [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.1870 MAX] и [http://forth.sourceforge.net/standard/dpans/dpans12.htm#12.6.1.1562 FMAX (f-max)] в стандарте ANS Forth ''(англ.)''
| | * [http://www.forth200x.org/documents/html/core.html#core:MAX Слово MAX в черновике Forth 200x] ''(англ.)'' |
| * Слова [http://forth-standard.org/standard/core/MAX MAX] и [http://forth-standard.org/standard/float/FMAX FMAX (f-max)] в черновике Forth 200x ''(англ.)'' | | * [http://www.forth200x.org/documents/html/float.html#floating:FMAX Слово FMAX (f-max) в черновике Forth 200x] ''(англ.)'' |
| * [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\05.OPERAZII%20NAD%20ZELYMI%20TISLAMI ОПЕРАЦИИ НАД ЦЕЛЫМИ ЧИСЛАМИ] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»]
| |
| * [http://www.forth.com/starting-forth/sf5/sf5.html The Philosophy of Fixed Point] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)'' | |
|
| |
|
|
| |
|
| | {{нет иллюстраций}} |
| {{заготовка}} | | {{заготовка}} |
| [[Категория:Слова Каллисто]] | | [[Категория:Слова Каллисто]] |
| [[Категория:Примитивы]]
| |
| [[Категория:Математические функции Каллисто]] | | [[Категория:Математические функции Каллисто]] |
| [[Категория:Усовершенствованные слова]]
| |
| [[Категория:Стандартные слова]]
| |
| [[Категория:1994 CORE]]
| |
| [[Категория:2012 CORE]]
| |