0⟨

Материал из ПМК вики
Версия от 17:27, 10 ноября 2017; AtH (обсуждение | вклад) (→‎Реализация)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску

0< (нуля меньше) — стандартное слово Каллисто. Проверить, отрицательное ли число.

0<             ( x -- f )                      Проверка на отрицательность.

Сравнивает x с нулём и засылает в стек флаг «истинно» (f=-1), если x<0 и флаг «ложно» (f=0), если x≥0.

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

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

0< и F0< в стандарте ANS Forth[править]

6.1.0250   0<                              "zero-less"                     CORE
           ( n -- flag )
           flag - true, если и только если n - меньше нуля.
12.6.1.1440   F0<                     "f-zero-less-than"               FLOATING
           ( -- flag ) ( F: r -- ) or ( r -- flag )
           flag - true, если и только если r - меньше чем нуль.

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

В 1968 году Чак Мур работал в Mohasco Industries, Inc (Amsterdam NY, англ.). Первая версия интерпретатора, получившая название FORTH, заработала на миникомпьютере IBM 1130 с графическим дисплеем IBM 2250 (16-битный процессор с ОЗУ 8К, дисководом, клавиатурой, принтером и ридером/панчером перфокарт). Первый FORTH знал слово 0<

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

     0<           n -- flag                     83         "zero-less"
          flag is true if n is less than zero (negative).

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

0<             n -- flag                     144        "zero-less"
    True if n is less than zero (negative)

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

0<            n  ---  f                        L0
       Leave a true flag if the number is less than zero (negative),
       otherwise leave a false flag.

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

Слово 0< в качестве флага «истинно» возвращает -1, что позволяет использовать результат f в логических операция AND, OR, XOR и NOT. Разумеется, при этом другие аргументы этих операций тоже должны использовать -1 в качестве флага «истинно». Все слова Каллисто, возвращающие флаги, используют в качестве флага «истинно» -1.

 886 STT:            1 +/− PKM03  KGOTO9             ; [SP] := −1; NEXT
 887 
 888 JZLESS:                                         ; Обработчик 0<
 889                 PKRM03  FX>=0 STT
 890                 Cx PKM03  KGOTO9
 891 
 892 ;#ZeroLess
 893 ; 0<               ( x −− f )                           Проверить на отрицательность.
 894 LZLESS:         .DB     2
 895                 .TEXT   "0<"                    ; ( x −− флаг )
 896                 .DW     LZGRET
 897 ZLESS:          .DW     JZLESS

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

CODE 0< ( n -- flag ) \ 94
\ flag "истина" тогда и только тогда, когда n меньше нуля.
    SAR EAX, # 1F
    RET
END-CODE
CODE F0<      \ *
       LEA EBP, -4 [EBP]
       MOV [EBP], EAX
       XOR EBX, EBX
       FTST
       FFREE ST
       FINCSTP
       FSTSW EAX
       SAHF
       JNB SHORT @@1
       MOV EBX, # -1
@@1:   MOV EAX, EBX
       RET
END-CODE

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

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

0<           N->F F "ИСТИНА", ЕСЛИ N ОТРИЦАТЕЛЬНО              13

                     Экран номер 13
( 31.03.86      AND  OR XOR  NOT  0=  0<      )

CODE 0<  ( N->F)  RW1 RW1 SR,   RW2 PULL,  RW2 RW2 LTR,
  PUTRW1 BNM,  RW1 0  BCTR,   PUTRW1 B,   END-CODE

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

             HEAD    202Q,'0',274Q,ZLESS                  ; 0<
             POP   AX
             CMP   AX, 0
             JS    TRUE         ; Если минус
             JMP   FALSE

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

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


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


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