MAX: различия между версиями
Перейти к навигации
Перейти к поиску
AtH (обсуждение | вклад) |
AtH (обсуждение | вклад) |
||
(не показано 7 промежуточных версий этого же участника) | |||
Строка 6: | Строка 6: | ||
== Ввод слова MAX == | == Ввод слова MAX == | ||
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите три клавиши [[Клавиша ÷|{{Серая клавиша|÷}}]] | В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите три клавиши [[Клавиша ÷|{{Серая клавиша|÷}}]] {{ШГ←}} [[Клавиша 0|{{Серая клавиша|0}}]] | ||
== MAX и FMAX в стандарте ANS Forth == | == MAX и FMAX в стандарте ANS Forth == | ||
Строка 39: | Строка 36: | ||
== Реализация == | == Реализация == | ||
В [[Каллисто|Каллисто 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 в ФОРТ-ЕС было [[примитив]]ом. Вот его описание и определение: | Слово MAX в ФОРТ-ЕС было [[примитив]]ом. Вот его описание и определение: | ||
<PRE> | <PRE> | ||
Строка 82: | Строка 123: | ||
[[Категория:Примитивы]] | [[Категория:Примитивы]] | ||
[[Категория:Математические функции Каллисто]] | [[Категория:Математические функции Каллисто]] | ||
[[Категория:Усовершенствованные слова]] | |||
[[Категория:Стандартные слова]] | |||
[[Категория:1994 CORE]] | |||
[[Категория:2012 CORE]] |
Текущая версия от 17:29, 10 ноября 2017
MAX (максимум) — стандартное слово Каллисто. Нахождение большего из двух чисел.
MAX ( y x −− x1 ) Нахождение большего из двух чисел. x1 := max (x, y)
Слово MAX засылает в стек число x1, которое является наибольшим из двух чисел x и y.
Ввод слова MAX[править]
В режиме ЛАТ последовательно нажмите три клавиши ÷ ШГ← 0
MAX и FMAX в стандарте ANS Forth[править]
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.
История[править]
В Каллисто имя MAX восходит к надписи на клавиатуре советского ПМК «Электроника МК-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:
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
Реализации из SP-Forth 4.20:
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
CODE FMAX \ * MOV EBX, EAX FCOM FSTSW EAX SAHF JB SHORT @@1 FXCH @@1: FFREE ST FINCSTP MOV EAX, EBX RET END-CODE
Советская реализация[править]
Слово MAX в ФОРТ-ЕС было примитивом. Вот его описание и определение:
МАХ 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
В FORTH ИТЭФ слово MAX также было примитивом и опиралось на часть кода примитива MIN, вот их определения:
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
Ссылки[править]
- Исходный текст слова MAX в Каллисто Классик 1.0
- См. слово MIN
- Слова MAX и FMAX (f-max) в стандарте ANS Forth (англ.)
- Слова MAX и FMAX (f-max) в черновике Forth 200x (англ.)
- ОПЕРАЦИИ НАД ЦЕЛЫМИ ЧИСЛАМИ в книге Л.Броуди «Начальный курс программирования на языке Форт»
- The Philosophy of Fixed Point в книге Leo Brodie Starting Forth (англ.)
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |