Редактирование:
0=
(раздел)
Перейти к навигации
Перейти к поиску
Внимание:
Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы
войдёте
или
создадите учётную запись
, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.
Анти-спам проверка.
Не
заполняйте это!
== Реализация == Если на стеке лежит логическое значение (флаг), слово 0= меняет его противоположное. Флаг «истинно» (x=−1 и любое ненулевое значение) превращается во флаг «ложно» (f=0). Флаг «ложно» (x=0) превратится во флаг «истинно» (f=−1). Этим объясняется широкая практика использования 0= для логического отрицания. Фактически это слово NOT, и во многих Фортах оно имеет такое второе название. Слово 0= возвращает −1 в качестве флага «истинно», что позволяет использовать результат f в логических операция [[AND]], [[OR]], [[XOR]] и [[NOT]]. Разумеется, при этом другие аргументы этих операций тоже должны использовать −1 в качестве флага «истинно». Все слова [[Каллисто]], возвращающие флаги, используют в качестве флага «истинно» −1. В отличии от [[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= POP AX CMP AX, 0 JE TRUE FALSE: SUB AX, AX PUT: PUSH AX NEXT TRUE: MOV AX, 1 JMP PUT </PRE>
Описание изменений:
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см.
Pmkwiki:Авторские права
).
НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!
В целях защиты вики от автоматического спама в правках просим вас решить следующую каптчу:
Отменить
Справка по редактированию
(в новом окне)
Навигация
Персональные инструменты
Вы не представились системе
Обсуждение
Вклад
Создать учётную запись
Войти
Пространства имён
Статья
Обсуждение
русский
Просмотры
Читать
Править
История
Ещё
Поиск
Навигация
Заглавная страница
Свежие правки
Случайная страница
Справка по MediaWiki
Инструменты
Ссылки сюда
Связанные правки
Служебные страницы
Сведения о странице