Текущая версия |
Ваш текст |
Строка 1: |
Строка 1: |
| '''0=''' (нулю равно) — стандартное слово [[Каллисто]]. Проверить на равенство нулю. | | '''0=''' — стандартное слово [[Каллисто]]. |
| 0= ( x -- f ) Проверка на равенство нулю.
| |
| [[Файл:CallistoLogic.png|thumb|right|264px|Пример работы слова 0=]]
| |
| Сравнивает x с [[FALSE|нулём]] и засылает в стек флаг «истинно» (f=−1), если x равен нулю и [[FALSE|флаг «ложно»]] (f=0), если x отличен от нуля.
| |
|
| |
|
| == Ввод слова 0= ==
| |
| В [[Режим NUM|режиме NUM]] последовательно нажмите три клавиши [[Клавиша 0|{{Серая клавиша|0}}]] [[Клавиша F|{{Оранжевая клавиша|F}}]] {{ШГ←}}
| |
|
| |
|
| == 0= и F0= в стандарте ANS Forth == | | == 0= в стандарте ANS Forth == |
| 6.1.0270 0= "zero-equals" CORE | | 6.1.0270 0= "zero-equals" CORE |
| ( x -- flag ) | | ( x -- flag ) |
| flag - true, если и только если x - равно нулю. | | flag - true, если и только если x - равно нулю. |
|
| |
|
| | |
| | == F0= в стандарте ANS Forth == |
| 12.6.1.1450 F0= "f-zero-equals" FLOATING | | 12.6.1.1450 F0= "f-zero-equals" FLOATING |
| ( -- flag ) ( F: r -- ) or ( r -- flag ) | | ( -- flag ) ( F: r -- ) or ( r -- flag ) |
| flag - true, если и только если r - равно нулю. | | flag - true, если и только если r - равно нулю. |
|
| |
|
| == История ==
| |
| В 1968 году Чак Мур работал в Mohasco Industries, Inc ([https://en.wikipedia.org/wiki/Amsterdam_%28city%29,_New_York Amsterdam NY], ''англ.''). Первая версия интерпретатора, получившая название FORTH, заработала на миникомпьютере IBM 1130 с графическим дисплеем 2250 (16-битный процессор с ОЗУ 8К, дисководом, клавиатурой, принтером и ридером/панчером перфокарт). Первый FORTH знал слово 0=
| |
|
| |
| В Форте-79 слово NOT было определено, как синоним 0=
| |
|
| |
| Если программы переносятся с Форта-79 или fig-Форта на [[Каллисто]], их слово NOT должно заменяться на 0=
| |
|
| |
|
| === 0= в предыдущем стандарте Forth-83 (англ.) ===
| | == 0= в предыдущем стандарте Forth-83 (англ.) == |
| 0= w -- flag 83 "zero-equals" | | 0= w -- flag 83 "zero-equals" |
| flag is true if w is zero. | | flag is true if w is zero. |
|
| |
|
| === 0= в стандарте Forth-79 (англ.) ===
| | |
| | == 0= в стандарте Forth-79 (англ.) == |
| 0= n -- flag 180 "zero-equals" | | 0= n -- flag 180 "zero-equals" |
| True if n is zero. | | True if n is zero. |
|
| |
|
| === 0= в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
| | |
| | == 0= в fig-FORTH Release 1 glossary, май 1979 (англ.) == |
| 0= n --- f L0 | | 0= n --- f L0 |
| Leave a true flag is the number is equal to zero, otherwise leave a | | Leave a true flag is the number is equal to zero, otherwise leave a |
| false flag. | | false flag. |
|
| |
|
| == Реализация ==
| |
| Если на стеке лежит логическое значение (флаг), слово 0= меняет его противоположное. Флаг «истинно» (x=−1 и любое ненулевое значение) превращается во флаг «ложно» (f=0). Флаг «ложно» (x=0) превратится во флаг «истинно» (f=−1). Этим объясняется широкая практика использования 0= для логического отрицания. Фактически это слово NOT, и во многих Фортах оно имеет такое второе название.
| |
|
| |
|
| Слово 0= возвращает −1 в качестве флага «истинно», что позволяет использовать результат f в логических операция [[AND]], [[OR]], [[XOR]] и [[NOT]]. Разумеется, при этом другие аргументы этих операций тоже должны использовать −1 в качестве флага «истинно». Все слова [[Каллисто]], возвращающие флаги, используют в качестве флага «истинно» −1.
| | == История == |
| | | В Форте-79 слово NOT было определено, как синоним 0= и это привело к тому, что от слова NOT в [[Каллисто]] пришлось отказаться. |
| В отличии от [[NOT|каллистянского NOT]], слово 0= превращает во флаг «ложь» не только −1, но и любое ненулевое значение. Применив 0= дважды, можно «нормализовать» флаг, превратив любое ненулевое значение в −1. | |
| <pre>
| |
| 866 ; ∗∗ Стандартные слова ∗∗
| |
| 867 ; ∗∗ Условные операторы ∗∗
| |
| 868 ;
| |
| 869 ;#ZeroEqual
| |
| 870 ; 0= ( x −− f ) Проверить на равенство нулю.
| |
| 871 ; Слово 0= часто используется, как логическое отрицание NOT. Заменяет 0 на −1 и наоборот.
| |
| 872 LZEQU: .DB 2
| |
| 873 .TEXT "0=" ; ( x −− флаг )
| |
| 874 .DW LIPRG
| |
| 875 ZEQU: .DW JZEQU
| |
| 876 JZEQU: PKRM03 PX!=0 STT
| |
| 877 STF: Cx PKM03 KGOTO9 ; [SP] := 0; NEXT
| |
| …
| |
| 886 STT: 1 +/− PKM03 KGOTO9 ; [SP] := −1; NEXT
| |
| </pre>
| |
| Реализации из SP-Forth 4.20:
| |
| <pre>
| |
| CODE 0= ( x -- flag ) \ 94
| |
| \ flag "истина" тогда и только тогда, когда x равно нулю.
| |
| SUB EAX, # 1
| |
| SBB EAX, EAX
| |
| RET
| |
| END-CODE
| |
| </pre>
| |
| <pre>
| |
| \ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
| |
| | |
| \ Operations
| |
| \ \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
| |
| | |
| | |
| CODE F0= \ *
| |
| LEA EBP, -4 [EBP]
| |
| MOV [EBP], EAX
| |
| XOR EBX, EBX
| |
| FTST
| |
| FFREE ST
| |
| FINCSTP
| |
| FSTSW EAX
| |
| SAHF
| |
| JNZ SHORT @@1
| |
| MOV EBX, # -1
| |
| @@1: MOV EAX, EBX
| |
| RET
| |
| END-CODE
| |
| </pre>
| |
| | |
| === Советская реализация ===
| |
| Слово 0= в ФОРТ-ЕС было [[примитив]]ом. Вот его описание и определение:
| |
| <PRE>
| |
| 0= W->F F "ИСТИНА", ЕСЛИ N РАВНО НУЛЮ 13
| |
| | |
| Экран номер 13
| |
| ( 31.03.86 AND OR XOR NOT 0= 0< )
| |
| | |
| CODE O= ( W->F) RW1 RW1 SR, RW2 PULL, RW2 RW2 LTR,
| |
| PUTRW1 BNZ, RW1 0 BCTR, PUTRW1 B, END-CODE
| |
| </PRE>
| |
| | |
| В FORTH ИТЭФ слово 0= тоже было [[примитив]]ом, вот его определение:
| |
| <PRE>
| |
| ; ** Стандартные слова **
| |
| ; ** Условные операторы **
| |
|
| |
|
| HEAD 202Q,'0',275Q,ZEQU ; 0=
| | Если программы переносятся с fig-Форта на [[Каллисто]], их слово NOT должно заменяться на 0= |
| POP AX
| |
| CMP AX, 0
| |
| JE TRUE
| |
| FALSE: SUB AX, AX
| |
| PUT: PUSH AX
| |
| NEXT
| |
| TRUE: MOV AX, 1
| |
| JMP PUT
| |
| </PRE>
| |
|
| |
|
| == Ссылки == | | == Ссылки == |
| * {{Исходник|ZeroEqual|0=}} | | * [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0270 Слово 0= (zero-equals) в стандарте ANS Forth] ''(англ.)'' |
| * См. слова [[NOT]], [[Слово =|=]], [[0⟨|0<]] и [[0⟩|0>]]
| | * [http://forth.sourceforge.net/standard/dpans/dpans12.htm#12.6.1.1450 Слово F0= (f-zero-equals) в стандарте ANS Forth] ''(англ.)'' |
| * См. также [[=|символ =]]
| | * [http://www.forth200x.org/documents/html/core.html#core:0= Слово 0= (zero-equals) в черновике Forth 200x] ''(англ.)'' |
| * Слова [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0270 0= (zero-equals)] и [http://forth.sourceforge.net/standard/dpans/dpans12.htm#12.6.1.1450 F0= (f-zero-equals)] в стандарте ANS Forth ''(англ.)''
| | * [http://www.forth200x.org/documents/html/float.html#floating:F0= Слово F0= (f-zero-equals) в черновике Forth 200x] ''(англ.)'' |
| * Слова [http://forth-standard.org/standard/core/ZeroEqual 0= (zero-equals)] и [http://forth-standard.org/standard/float/FZeroEqual F0= (f-zero-equals)] в черновике 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]]
| |