⟨: различия между версиями
AtH (обсуждение | вклад) м (Арви Хэкер переименовал страницу Меньше (Каллисто) в ⟨ (Каллисто)) |
AtH (обсуждение | вклад) |
||
(не показано 46 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
''' | '''<''' (меньше) — стандартное слово [[Каллисто]]. | ||
< ( y x −− f ) Меньше. f равно −1 если и только если y меньше, чем x. | |||
== Ввод слова < == | |||
В [[Режим NUM|режиме NUM]] последовательно нажмите две клавиши [[Клавиша F|{{Оранжевая клавиша|F}}]] {{ШГ→}} | |||
== < и F< в стандарте ANS Forth == | |||
<PRE> | |||
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. | |||
</PRE> | |||
== История == | |||
Слово < является одним из самых древних в Форте. | |||
Оно появилось в программе CURVE, написанной Чак Муром на Алголе для Burroughs B5500 в 1964 году ([https://ru.wikipedia.org/wiki/%D0%9D%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%83%D1%81%D0%BA%D0%BE%D1%80%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D0%BB%D0%B0%D0%B1%D0%BE%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B8%D1%8F_SLAC Национальная ускорительная лаборатория SLAC], [https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D1%8D%D0%BD%D1%84%D0%BE%D1%80%D0%B4%D1%81%D0%BA%D0%B8%D0%B9_%D1%83%D0%BD%D0%B8%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%82%D0%B5%D1%82 Стэнфордский университет]). | |||
Вместе со словом < появилось соглашение оставлять значение истинности на стеке. Сперва это было 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 (англ.) === | |||
<PRE> | |||
< n1 n2 -- flag 139 "less-than" | |||
True if n1 is less than n2. | |||
-32768 32767 < must return true. | |||
-32768 0 < must be distinguished. | |||
</PRE> | |||
=== < в 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]] [[примитив]] < вычитает два числа на вершине стека и сравнивает результат с нулём: | |||
<pre> | |||
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 | |||
</pre> | |||
Реализации из SP-Forth 4.20: | |||
<pre> | |||
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 | |||
</pre> | |||
<pre> | |||
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 | |||
</pre> | |||
=== Советская реализация === | |||
У Баранова-Ноздрунова приводится следующее описание слова < (стр. 26): | |||
: < ( A,B ---> A < B ) - 0< ; | |||
Описание и определение слова < в ядре ФОРТ-ЕС: | |||
<PRE> | |||
< N1,N2->F F НЕ НУЛЬ, ЕСЛИ N1 МЕНЬШЕ N2 49 | |||
Экран номер 19 | |||
( 31.03.86 CPАBHEHИЯ И РАЗРЕШЕНИЯ В ШИТОМ КОДЕ) | |||
: < ( N1,N2->F) - 0< ; | |||
</PRE> | |||
В FORTH ИТЭФ слово < тоже было [[примитив]]ом, вот его определение: | |||
<PRE> | |||
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 | |||
</PRE> | |||
=== colorForth (cf2019.nasm 2019 Sep 14) === | |||
<PRE> | |||
less: | |||
cmp [ esi ], _TOS_ | |||
js .forward | |||
xor ecx, ecx | |||
.forward: | |||
ret | |||
</PRE> | |||
== Ссылки == | |||
* {{Исходник|Less|<}} | |||
* См. слова [[0⟨|0<]], [[Слово =|=]] и [[⟩|>]] | |||
* См. также [[Символ с кодом 60|символ <]] | |||
* Слова [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0480 < (less-than)] и [http://forth.sourceforge.net/standard/dpans/dpans12.htm#12.6.1.1460 F< (f-less-than)] в стандарте ANS Forth ''(англ.)'' | |||
* Слова [http://forth-standard.org/standard/core/less < (less-than)] и [http://forth-standard.org/standard/float/Fless F< (f-less-than)] в черновике Forth 200x ''(англ.)'' | |||
* [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\04.%20KOMPJUTER%20%22PRINIMAET%20RESENIA%22 КОМПЬЮТЕР "ПРИНИМАЕТ РЕШЕНИЯ"] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»] | |||
* [http://www.forth.com/starting-forth/sf4/sf4.html Decisions, Decisions…] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)'' | |||
{{нет иллюстраций}} | {{нет иллюстраций}} | ||
{{заготовка}} | {{заготовка}} | ||
[[Категория:Слова Каллисто]] | [[Категория:Слова Каллисто]] | ||
[[Категория:Примитивы]] | |||
[[Категория:Операции сравнения Каллисто]] | [[Категория:Операции сравнения Каллисто]] | ||
[[Категория:Стандартные слова]] | |||
[[Категория:1994 CORE]] | |||
[[Категория:2012 CORE]] |
Текущая версия от 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 (англ.)
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |