Слово =

Материал из ПМК вики
Перейти к навигации Перейти к поиску

= (равно) — стандартное слово Каллисто.

=              ( x1 x2 -- f )                  Проверка на равенство.

Сравнивает x1 и x2. В стек засылается «истина» (f=−1), если x1=x2 и «ложь» (f=0), если x1≠x2.

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

В режиме NUM последовательно нажмите две клавиши  F   ШГ← 

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

6.1.0530   =                                  "equals"                     CORE
           ( x1 x2 -- flag )
           flag - true, если и только если x1 - побитно равно x2.

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

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

     =            w1 w2 -- flag                 83            "equals"
          flag is true if w1 is equal to w2.

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

=              n1 n2 -- flag                 173           "equals"
    True if n1 is equal to n2.

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

=             n1  n2  ---  f                  L0
       Leave a true flag if n1=n2; otherwise leave a false flag.

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

В Каллисто 1.0 примитив = вычитает два числа на вершине стека и сравнивает результат с нулём:

 886 STT:            1 +/− PKM03  KGOTO9             ; [SP] := −1; NEXT
…
 899 ;#Equal
 900 ; =                ( y x −− f )                         Равно. Проверить на равенство.
 901 ; В стандарте Форта слово = сравнивает значения на вершине стека побитово.
 902 LEQUAL:         .DB     1
 903                 .TEXT   "="                     ; ( a b −− флаг )
 904                 .DW     LZLESS
 905 EQUAL:          .DW     JEQUAL
 906 JEQUAL:         RM3 M8  1 + M3
 907                 PKRM03 KRM8 −  FX!=0 STT
 908                 Cx PKM03  KGOTO9

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

\ ================================================================
\ Сравнения

CODE = ( x1 x2 -- flag ) \ 94
\ flag "истина" тогда и только тогда, когда x1 побитно равен x2.
     XOR  EAX, [EBP]
     SUB  EAX, # 1
     SBB  EAX, EAX 
     LEA  EBP, 4 [EBP]
     RET
END-CODE
CODE F=             \ *
       LEA EBP, -4 [EBP]
       MOV [EBP], EAX
       XOR EBX, EBX
       FCOMPP
       FSTSW  EAX
       SAHF
       JNE  SHORT @@1
       MOV EBX, # -1
@@1:   MOV EAX, EBX
       RET
END-CODE

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

У Баранова-Ноздрунова приводится следующее определение слова = (стр. 26):

 : =   ( A,B ---> A = B )    - 0= ;

Описание и определение слова = в ядре ФОРТ-ЕС:

=         W1,W2->F F НЕ НУЛЬ, ЕСЛИ W1 РАВНО W2                  19

                     Экран номер 19
( 31.03.86   CPАBHEHИЯ И РАЗРЕШЕНИЯ В ШИТОМ КОДЕ)

: =  ( W1,W2->F)    - 0= ;

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

             HEAD    201Q,,275Q,EQUAL                     ; =
             POP   AX
             POP   CX
             CMP   CX, AX
             JE    TRUE
             JMP   FALSE

Метки TRUE и FALSE см. в определении слова 0=

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


  У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их.


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