MAX: различия между версиями

Материал из ПМК вики
Перейти к навигации Перейти к поиску
 
(не показаны 4 промежуточные версии этого же участника)
Строка 6: Строка 6:


== Ввод слова MAX ==
== Ввод слова MAX ==
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите три клавиши [[Клавиша ÷|{{Серая клавиша|÷}}]] [[Клавиша ШГ влево|{{Чёрная клавиша|ШГ←}}]] [[Клавиша 0|{{Серая клавиша|0}}]]
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите три клавиши [[Клавиша ÷|{{Серая клавиша|÷}}]] {{ШГ←}} [[Клавиша 0|{{Серая клавиша|0}}]]
 
== Детали реализации ==
Слово является усовершенствованной «обёрткой» вокруг команды ЭКВМ [[К max]].


== 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>

Текущая версия от 17:29, 10 ноября 2017

MAX (максимум) — стандартное слово Каллисто. Нахождение большего из двух чисел.

MAX            ( y x −− x1 )                        Нахождение большего из двух чисел.
                                                    x1 := max (x, y)
Пример работы слова MAX

Слово 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

Ссылки[править]


  Это заготовка статьи. Вы можете помочь проекту, дополнив её.