⟨: различия между версиями
AtH (обсуждение | вклад) |
AtH (обсуждение | вклад) |
||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 108: | Строка 108: | ||
JG TRUE | JG TRUE | ||
JMP FALSE | JMP FALSE | ||
... | |||
FALSE: SUB AX, AX | |||
PUT: PUSH AX | |||
NEXT | |||
TRUE: MOV AX, 1 | |||
JMP PUT | |||
</PRE> | |||
=== colorForth (cf2019.nasm 2019 Sep 14) === | |||
<PRE> | |||
less: | |||
cmp [ esi ], _TOS_ | |||
js .forward | |||
xor ecx, ecx | |||
.forward: | |||
ret | |||
</PRE> | </PRE> | ||
== Ссылки == | == Ссылки == |
Текущая версия от 15:11, 30 июня 2021
< (меньше) — стандартное слово Каллисто.
< ( y x −− f ) Меньше. f равно −1 если и только если y меньше, чем x.
Ввод слова <[править]
В режиме NUM последовательно нажмите две клавиши F ШГ→
< и F< в стандарте ANS Forth[править]
6.1.0480 < "less-than" CORE ( n1 n2 -- flag ) flag - true, если и только если n1 - меньше чем n2. См.: 6.1.2340 U<. 12.6.1.1460 F< "f-less-than" FLOATING ( -- flag ) ( F: r1 r2 -- ) or ( r1 r2 -- flag ) flag - true, если и только если r1 - меньше чем r2.
История[править]
Слово < является одним из самых древних в Форте.
Оно появилось в программе CURVE, написанной Чак Муром на Алголе для Burroughs B5500 в 1964 году (Национальная ускорительная лаборатория SLAC, Стэнфордский университет).
Вместе со словом < появилось соглашение оставлять значение истинности на стеке. Сперва это было 1 для «истина» и 0 для «ложь».
< в предыдущем стандарте Forth-83 (англ.)[править]
< n1 n2 -- flag 83 "less-than" flag is true if n1 is less than n2. -32678 32767 < must return true. -32768 0 < must return true.
< в стандарте Forth-79 (англ.)[править]
< n1 n2 -- flag 139 "less-than" True if n1 is less than n2. -32768 32767 < must return true. -32768 0 < must be distinguished.
< в fig-FORTH Release 1 glossary, май 1979 (англ.)[править]
< n1 n2 --- f L0 Leave a true flag if n1 is less than n2; otherwise leave a false flag.
Реализация[править]
В Каллисто 1.0 примитив < вычитает два числа на вершине стека и сравнивает результат с нулём:
886 STT: 1 +/− PKM03 KGOTO9 ; [SP] := −1; NEXT … 910 ;#Less 911 ; < ( y x −− f ) Меньше. f равно −1 если и только если y меньше, чем x. 912 LLESS: .DB 1 913 .TEXT "<" ; ( a b −− флаг ) 914 .DW LEQUAL 915 LESS: .DW JLESS 916 JLESS: RM3 M8 1 + M3 917 PKRM03 KRM8 − FX>=0 STT 918 Cx PKM03 KGOTO9
Реализации из SP-Forth 4.20:
CODE < ( n1 n2 -- flag ) \ 94 \ flag "истина" тогда и только тогда, когда n1 меньше n2. CMP EAX, [EBP] SETLE AL AND EAX, # 1 A; 0x48 C, \ DEC EAX LEA EBP, 4 [EBP] RET END-CODE
CODE F< \ * LEA EBP, -4 [EBP] MOV [EBP], EAX XOR EBX, EBX FCOMPP FSTSW EAX SAHF JBE SHORT @@1 MOV EBX, # -1 @@1: MOV EAX, EBX RET END-CODE
Советская реализация[править]
У Баранова-Ноздрунова приводится следующее описание слова < (стр. 26):
: < ( A,B ---> A < B ) - 0< ;
Описание и определение слова < в ядре ФОРТ-ЕС:
< N1,N2->F F НЕ НУЛЬ, ЕСЛИ N1 МЕНЬШЕ N2 49 Экран номер 19 ( 31.03.86 CPАBHEHИЯ И РАЗРЕШЕНИЯ В ШИТОМ КОДЕ) : < ( N1,N2->F) - 0< ;
В FORTH ИТЭФ слово < тоже было примитивом, вот его определение:
HEAD 201Q,,274Q,LESS ; < POP AX POP CX CMP AX, CX JG TRUE JMP FALSE ... FALSE: SUB AX, AX PUT: PUSH AX NEXT TRUE: MOV AX, 1 JMP PUT
colorForth (cf2019.nasm 2019 Sep 14)[править]
less: cmp [ esi ], _TOS_ js .forward xor ecx, ecx .forward: ret
Ссылки[править]
- Исходный текст слова < в Каллисто Классик 1.0
- См. слова 0<, = и >
- См. также символ <
- Слова < (less-than) и F< (f-less-than) в стандарте ANS Forth (англ.)
- Слова < (less-than) и F< (f-less-than) в черновике Forth 200x (англ.)
- КОМПЬЮТЕР "ПРИНИМАЕТ РЕШЕНИЯ" в книге Л.Броуди «Начальный курс программирования на языке Форт»
- Decisions, Decisions… в книге Leo Brodie Starting Forth (англ.)
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |