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

Материал из ПМК вики
Перейти к навигации Перейти к поиску
Нет описания правки
 
(не показано 28 промежуточных версий этого же участника)
Строка 1: Строка 1:
'''MIN''' — стандартное слово [[Каллисто]]. Нахождение минимума из двух чисел.
'''MIN''' (минимум) — стандартное слово [[Каллисто]]. Нахождение меньшего из двух [[Десятичное число|чисел]].
  MIN            ( x1 x2 -- x3 )
  MIN            ( y x −− x1 )                       Нахождение меньшего из двух чисел.
                                                    x1 := min (x, y)
[[Файл:CallistoMAXMIN2DUP.png|thumb|right|264px|Пример работы слова MIN]]
Слово MIN засылает в [[Стек данных|стек]] [[Десятичное число|число]] x1, которое является наименьшим из двух [[Десятичное число|чисел]] x и y.


Засылает в [[Стек данных|стек]] [[Десятичное число|число]] x3, которое является меньшим из двух [[Десятичное число|чисел]] x1 и x2.
== Ввод слова MIN ==
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите три белые клавиши [[Клавиша ÷|{{Серая клавиша|÷}}]] [[Клавиша 7|{{Серая клавиша|7}}]] [[Клавиша 4|{{Серая клавиша|4}}]]


== Детали реализации ==
== MIN и FMIN в стандарте ANS Forth ==
Слово является «обёрткой» вокруг команды ЭКВМ [[К max]].
<PRE>
6.1.1880  MIN                                                            CORE
            ( n1 n2 -- n3 )
            n3 меньшее из n1 и n2.


== FMIN в стандарте ANS Forth ==
  12.6.1.1565  FMIN                      "f-min"                        FLOATING
  12.6.1.1565  FMIN                      "f-min"                        FLOATING
             ( F: r1 r2 -- r3 ) or ( r1 r2 -- r3 )
             ( F: r1 r2 -- r3 ) or ( r1 r2 -- r3 )
             r3 меньшее из r1 и r2.
             r3 меньшее из r1 и r2.
</PRE>


== MIN в стандарте ANS Forth ==
== История ==
6.1.1880  MIN                                                            CORE
=== MIN в предыдущем стандарте Forth-83 (англ.) ===
            ( n1 n2 -- n3 )
            n3 меньшее из n1 и n2.
 
== MIN в предыдущем стандарте Forth-83 (англ.) ==
       MIN          n1 n2 -- n3                  79              "min"
       MIN          n1 n2 -- n3                  79              "min"
           n3 is the lesser of n1 and n2 according to the operation of
           n3 is the lesser of n1 and n2 according to the operation of
           < .
           < .


== MIN в стандарте Forth-79 (англ.) ==
=== MIN в стандарте Forth-79 (англ.) ===
  MIN            n1 n2 -- n3                  127              "min"
  MIN            n1 n2 -- n3                  127              "min"
     Leave the lesser of two numbers.
     Leave the lesser of two numbers.


== MIN в fig-FORTH Release 1 glossary, май 1979 (англ.) ==
=== MIN в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
  MIN          n1  n2  ---  min                L0
  MIN          n1  n2  ---  min                L0
         Leave the smaller of two numbers.
         Leave the smaller of two numbers.
== Реализация ==
В [[Каллисто|Каллисто 1.0]] слово MIN является «обёрткой» вокруг команды ЭКВМ [[К max]]:
<pre>
1542 ;#MIN
1543 ; MIN              ( y x −− x1 )                        Меньшее из двух чисел. x1 := min (x, y)
1544 LMIN:          .DB    3
1545                .TEXT  "MIN"                  ; ( a b −− min )
1546                .DW    LINVERT
1547 MIN:            .DW    JMIN
1548 JMIN:          RM3 MB  1 +  MA M3
1549                KRMB KRMA KMAX <−> KMA          ; Выделить минимум, обёртка вокруг K MAX (МК−161).
1550                KGOTO9
</pre>
Реализации из SP-Forth 4.20:
<pre>
CODE MIN ( n1 n2 -- n3 ) \ 94
\ n3 - меньшее из n1 и n2.
ARCH-P6 [IF]
    MOV    EDX, [EBP]
    CMP    EDX, EAX
    CMOVL  EAX, EDX
[ELSE]   
    CMP    EAX, [EBP]
    JG # ' DROP
[THEN]   
    LEA EBP, 4 [EBP]
    RET
END-CODE
</pre>
<pre>
CODE FMIN \ *
      MOV EBX, EAX
      FCOM
      FSTSW  EAX
      SAHF
      JA  SHORT @@1
      FXCH
@@1:  FFREE  ST
      FINCSTP
      MOV EAX, EBX
      RET
END-CODE
</pre>
=== Советская реализация ===
Слово MIN в ФОРТ-ЕС было [[примитив]]ом. Вот его описание и определение:
<PRE>
MIN          N1,N2->N3 МЕНЬШЕЕ ИЗ ЧИСЕЛ N1 И N2                22
                    Экран номер 22
( 31.03.86  FILL ERASE BLANK COMPILE [ ] MIN MAX HEX DECIMAL)
CODE MIN  ( N1,N2->N3 )  14 LHRW12 BAL, RW1 RW2 CR,
  POP BNH,  RW1 RW2 LR,  POPPUT1 B,  END-CODE
</PRE>
В FORTH ИТЭФ слово 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
</PRE>


== Ссылки ==
== Ссылки ==
* [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.1880 Слово MIN в стандарте ANS Forth] ''(англ.)''
* {{Исходник|MIN|MIN}}
* [http://forth.sourceforge.net/standard/dpans/dpans12.htm#12.6.1.1565 Слово FMIN (f-min) в стандарте ANS Forth] ''(англ.)''
* См. слово [[MAX]]
* [http://www.forth200x.org/documents/html/core.html#core:MIN Слово MIN в черновике Forth 200x] ''(англ.)''
* Слова [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.1880 MIN] и [http://forth.sourceforge.net/standard/dpans/dpans12.htm#12.6.1.1565 FMIN (f-min)] в стандарте ANS Forth ''(англ.)''
* [http://www.forth200x.org/documents/html/float.html#floating:FMIN Слово FMIN (f-min) в черновике Forth 200x] ''(англ.)''
* Слова [http://forth-standard.org/standard/core/MIN MIN] и [http://forth-standard.org/standard/float/FMIN FMIN (f-min)] в черновике 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]]

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

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

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

Слово MIN засылает в стек число x1, которое является наименьшим из двух чисел x и y.

Ввод слова MIN[править]

В режиме ЛАТ последовательно нажмите три белые клавиши  ÷   7   4 

MIN и FMIN в стандарте ANS Forth[править]

 6.1.1880   MIN                                                             CORE
            ( n1 n2 -- n3 )
            n3 меньшее из n1 и n2.

 12.6.1.1565   FMIN                      "f-min"                        FLOATING
            ( F: r1 r2 -- r3 ) or ( r1 r2 -- r3 )
            r3 меньшее из r1 и r2.

История[править]

MIN в предыдущем стандарте Forth-83 (англ.)[править]

     MIN          n1 n2 -- n3                   79               "min"
          n3 is the lesser of n1 and n2 according to the operation of
          < .

MIN в стандарте Forth-79 (англ.)[править]

MIN            n1 n2 -- n3                   127              "min"
    Leave the lesser of two numbers.

MIN в fig-FORTH Release 1 glossary, май 1979 (англ.)[править]

MIN           n1  n2  ---  min                 L0
       Leave the smaller of two numbers.

Реализация[править]

В Каллисто 1.0 слово MIN является «обёрткой» вокруг команды ЭКВМ К max:

1542 ;#MIN
1543 ; MIN              ( y x −− x1 )                        Меньшее из двух чисел. x1 := min (x, y)
1544 LMIN:           .DB     3
1545                 .TEXT   "MIN"                   ; ( a b −− min )
1546                 .DW     LINVERT
1547 MIN:            .DW     JMIN
1548 JMIN:           RM3 MB  1 +  MA M3
1549                 KRMB KRMA KMAX <−> KMA          ; Выделить минимум, обёртка вокруг K MAX (МК−161).
1550                 KGOTO9

Реализации из SP-Forth 4.20:

CODE MIN ( n1 n2 -- n3 ) \ 94
 \ n3 - меньшее из n1 и n2.
 ARCH-P6 [IF]
     MOV     EDX, [EBP]
     CMP     EDX, EAX
     CMOVL   EAX, EDX
[ELSE]     
     CMP     EAX, [EBP]
     JG # ' DROP
[THEN]     
     LEA EBP, 4 [EBP]
     RET
END-CODE
CODE FMIN \ *
       MOV EBX, EAX
       FCOM
       FSTSW  EAX
       SAHF
       JA  SHORT @@1
       FXCH
@@1:   FFREE  ST
       FINCSTP
       MOV EAX, EBX
       RET
END-CODE

Советская реализация[править]

Слово MIN в ФОРТ-ЕС было примитивом. Вот его описание и определение:

MIN          N1,N2->N3 МЕНЬШЕЕ ИЗ ЧИСЕЛ N1 И N2                 22

                     Экран номер 22
( 31.03.86   FILL ERASE BLANK COMPILE [ ] MIN MAX HEX DECIMAL)

CODE MIN   ( N1,N2->N3 )  14 LHRW12 BAL, RW1 RW2 CR,
   POP BNH,   RW1 RW2 LR,  POPPUT1 B,  END-CODE

В FORTH ИТЭФ слово MIN также было примитивом, вот его определение:

            HEAD     203Q,'MI',316Q,MIN                   ; MIN
            POP  AX
            POP  CX
            CMP  CX,  AX
            JL  DEEP
   TOP:     PUSH AX
            NEXT
   DEEP:    PUSH CX
            NEXT

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


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