Редактирование: XOR

Перейти к навигации Перейти к поиску
Внимание: Вы не вошли в систему. Ваш IP-адрес будет общедоступен, если вы запишете какие-либо изменения. Если вы войдёте или создадите учётную запись, её имя будет использоваться вместо IP-адреса, наряду с другими преимуществами.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий ниже, чтобы убедиться, что это нужная вам правка, и запишите страницу ниже, чтобы отменить правку.

Текущая версия Ваш текст
Строка 1: Строка 1:
'''XOR''' (исключающее или, читается «ксор») — стандартное слово [[Каллисто]]. 32-битное поразрядное сложение по модулю два.
'''XOR''' (исключающее ИЛИ) — стандартное слово [[Каллисто]]. 32-битное поразрядное логическое исключающее ИЛИ.
  XOR            ( n1 n2 −− i )                  32−битное сложение по модулю два (исключающее или).
  XOR            ( i1 i2 -- i3 )
                                                i := n1 ⊕ n2
[[Файл:CallistoXorIdotRegQEmitHex.png|thumb|right|264px|Пример работы слова XOR]]
Выполняет 32-битное логическое исключающее «или» для целых чисел n1 и n2, результат в [[Дополнительный код|дополнительном коде]] i заносится в [[Стек данных|стек]].


Другими словами, каждый из 32 битов числа n1 сравнивается с соответствующим битом числа n2 и, если один из них (но не оба) равен единице, в соответствующий бит числа i заносится единица. В противном случае, когда оба рассматриваемых бита совпадают, соответствующий бит результата i будет равен нулю.
Выполняет поразрядное логическое исключающее "ИЛИ" (сложение по модулю два) для 32-битных чисел i1 и i2, результат i3 заносится в [[Стек данных|стек]].


== Ввод слова XOR ==
Другими словами, каждый бит числа i1 сравнивается с соответствующим битом числа i2 и, если один из них (но не оба) равен единице, в соответствующий бит числа i3 заносится единица. В противном случае, когда оба рассматриваемых бита совпадают, соответствующий бит результата i3 будет равен нулю.
В [[Режим ЛАТ|режиме ЛАТ]] последовательно нажмите три белые клавиши [[Клавиша 0|{{Серая клавиша|0}}]] [[Клавиша 5|{{Серая клавиша|5}}]] [[Клавиша ×|{{Серая клавиша|×}}]]
 
== Детали реализации ==
В [[Каллисто]] для записи 32-битных целых чисел в [[Стек данных|десятичном стеке]] используется [[дополнительный код]] (''англ.'' two's complement). На входе слово XOR принимает как 32-битные целые в [[Дополнительный код|дополнительном коде]], так и беззнаковые целые. Результат i3 всегда представлен в [[Дополнительный код|дополнительном коде]] и отрицателен, если старший бит в нём установлен.
 
XOR даёт правильный результат побитового исключающего "ИЛИ" над числами любой разрядности, меньшей 32, включая 24-, 16- и 8-битные числа. Если оба аргумента разрядности меньше, чем 32, представлены в [[Дополнительный код|дополнительном коде]], результат i3 также выдаётся в [[Дополнительный код|дополнительном коде]]. Если оба аргумента представлены в беззнаковом виде, результат также будет в беззнаковом виде — положительным числом или нулём.
 
Последовательности слов {{Текст на индикаторе|65535, XOR}} и {{Текст на индикаторе|255 XOR}} позволяют сделать поразрядное логическое отрицание (NOT) 16-битного и 8-битного числа, находящегося на вершине [[Стек данных|стека]].
 
Также слово XOR можно использовать для логической операции исключающего "ИЛИ" над флагами, если значение «истина» представляется числом -1. Все стандартные слова [[Каллисто]], возвращающие логическое значение (например, команды сравнения), используют это значение для возвращаемого флага «истина».
 
Слово XOR реализовано с использованием команды ЭКВМ [[K XOR]].


== XOR в стандарте ANS Forth ==
== XOR в стандарте ANS Forth ==
Строка 15: Строка 22:
             x3 поразрядное исключающее-или x1 и x2.
             x3 поразрядное исключающее-или x1 и x2.


== История ==
== XOR в предыдущем стандарте Forth-83 (англ.) ==
В отечественных калькуляторах команда XOR претерпела большие изменения. В советских ПМК команда К⨁ осуществляла побитовое сложение по модулю два во всех тетрадах [[Мантисса|мантиссы]] в [[Двоично-десятичный формат|формате bcd]], кроме старшей. В [[МК-152|«Электронике МК-152»]] команда получила более практичное назначение и новое имя и имя [[K XOR]], сохранив свой код операции. Команда [[K XOR]] стала работать с 8-битными двоичными числами. Именно на её основе удалось реализовать стандартное слово XOR для работы с 32-битными целыми.
 
=== XOR в предыдущем стандарте Forth-83 (англ.) ===
       XOR          16b1 16b2 -- 16b3            79              "x-or"
       XOR          16b1 16b2 -- 16b3            79              "x-or"
           16b3 is the bit-by-bit exclusive-or of 16b1 with 16b2.
           16b3 is the bit-by-bit exclusive-or of 16b1 with 16b2.


=== XOR в стандарте Forth-79 (англ.) ===
== XOR в стандарте Forth-79 (англ.) ==
  XOR            n1 n2 -- n3                  174            "x-or"
  XOR            n1 n2 -- n3                  174            "x-or"
     Leave the bitwise exclusive-or of two numbers.
     Leave the bitwise exclusive-or of two numbers.


=== XOR в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
== XOR в fig-FORTH Release 1 glossary, май 1979 (англ.) ==
  XOR          nl  n2  ---  xor                L1
  XOR          nl  n2  ---  xor                L1
         Leave the bitwise logical exclusive or of two values.
         Leave the bitwise logical exclusive or of two values.
== Реализация ==
В [[Каллисто]] для записи 32-битных целых чисел в [[Стек данных|десятичном стеке]] используется [[дополнительный код]] (''англ.'' two's complement). На входе слово XOR принимает как 32-битные целые в [[Дополнительный код|дополнительном коде]], так и беззнаковые целые. Результат i всегда представлен в [[Дополнительный код|дополнительном коде]] и отрицателен, если старший бит в нём установлен.
XOR даёт правильный результат побитового исключающего «или» над числами любой разрядности, меньшей 32, включая 24-, 16- и 8-битные числа. Если оба аргумента разрядности меньше, чем 32, представлены в [[Дополнительный код|дополнительном коде]], результат i также выдаётся в [[Дополнительный код|дополнительном коде]]. Если оба аргумента представлены в беззнаковом виде, результат также будет в беззнаковом виде — положительным числом или нулём.
Последовательности слов {{Текст на индикаторе|65535, XOR}} и {{Текст на индикаторе|255 XOR}} позволяют сделать поразрядное логическое отрицание (NOT) 16-битного и 8-битного числа, находящегося на вершине [[Стек данных|стека]].
Также слово XOR можно использовать для логической операции исключающего "или" над флагами, если значение «истина» представляется числом -1. Все стандартные слова [[Каллисто]], возвращающие логическое значение (например, команды сравнения), используют это значение для возвращаемого флага «истина».
В [[Каллисто|Каллисто 1.0]] слово XOR реализовано с использованием команды ЭКВМ [[K XOR]]:
<pre>
1481 ; Приводит 32−битное число в беззнаковый вид.
1482 Norm32:        FX<0 N32A
1483                65536 FX^2 +                    ; FX^2 vs ENT ∗
1484 N32A:          RTN
1506 ; Преобразование 32−битного беззнакового в 32−битное знаковое.
1507 Sign32:
1508                32768 ENT 65536 ∗              ; 2 147 483 648
1509                − FX<0 S32Fix
1510                FANS + RTN                      ; Восстановить исходное число
1511 S32Fix:        FANS − RTN                      ; Преобразовать
1512
1513 ;#XOR
1514 ; XOR              ( n1 n2 −− i )                      32−битное сложение по модулю два (исключающее или). i := n1 &#8853; n2
1515 LSXOR:          .DB    3
1516                .TEXT  "XOR"                  ; ( a b −− a XOR b )
1517                .DW    LSOR
1518 SXOR:          .DW    JSXOR                  ; 32−битное побитовое логическое исключающее ИЛИ (XOR).
1519 JSXOR:          RM3 MB  1 M1 +  MA M3
1520                CX M8 4 M0
1521                KRMB  PGSB Norm32  MB
1522                KRMA  PGSB Norm32  MA
1523                GOTO SXORIN
1524 SXORL:          M8  RM1 RME ∗ M1
1525                RMA
1526 SXORIN:            ENT RME / FANS <−> KINT MA ∗ −
1527                RMB ENT RME / FANS <−> KINT MB ∗ −
1528                KXOR RM1 ∗ RM8 +
1529                FL0 SXORL
1530                PGSB Sign32
1531                PKM03 KGOTO9
</pre>
Реализация из SP-Forth 4.20:
<pre>
CODE XOR ( x1 x2 -- x3 ) \ 94
\ x3 - побитовое "исключающее ИЛИ" x1 и x2.
    XOR EAX, [EBP]
    LEA EBP, 4 [EBP]
    RET
END-CODE
</pre>
=== Советская реализация ===
Слово XOR в ФОРТ-ЕС было [[примитив]]ом. Вот его определение:
<PRE>
XOR          W1,W2->W3 ПОРАЗРЯДНОЕ "ИСКЛЮЧАЮЩЕЕ ИЛИ"          13
                    Экран номер 13
( 31.03.86      AND  OR XOR  NOT  0=  0<      )
CODE XOR    ( W1,M2->W3)
14 LHRW12 BAL,  RW1 RW2 XR, POPPUT1 B,  END-CODE
</PRE>
В FORTH ИТЭФ слово XOR также было [[примитив]]ом, вот его определение:
<PRE>
            HEAD    203Q,'AN',304Q,$AND                  ; AND
            POP  AX
            POP  CX
            AND  AX,  CX
  ENDA:    PUSH AX
            NEXT
            ...
            HEAD    203Q,'XO',322Q,$XOR                  ; XOR
            POP  AX
            POP  CX
            XOR  AX, CX
            JMP  ENDA
</PRE>


== Ссылки ==
== Ссылки ==
* {{Исходник|XOR|XOR}}
* См. слова [[AND]] [[OR]] [[INVERT]]
* См. слова [[AND]], [[OR]] и [[NOT]]
* [http://ru.wikipedia.org/wiki/%D0%A1%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8E_2 Сложение по модулю 2], [https://ru.wikipedia.org/wiki/%D0%9B%D0%BE%D0%B3%D0%B8%D0%BA%D0%B0_%D0%B2%D1%8B%D1%81%D0%BA%D0%B0%D0%B7%D1%8B%D0%B2%D0%B0%D0%BD%D0%B8%D0%B9 Логика высказываний] и [https://ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8 Битовые операции] в Википедии
* [http://ru.wikipedia.org/wiki/%D0%A1%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8E_2 Сложение по модулю 2], [https://ru.wikipedia.org/wiki/%D0%9B%D0%BE%D0%B3%D0%B8%D0%BA%D0%B0_%D0%B2%D1%8B%D1%81%D0%BA%D0%B0%D0%B7%D1%8B%D0%B2%D0%B0%D0%BD%D0%B8%D0%B9 Логика высказываний] и [https://ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82%D0%BE%D0%B2%D1%8B%D0%B5_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%B8 Битовые операции] в Википедии
* [http://www.catb.org/~esr/jargon/html/X/xor.html XOR на The Jargon File] ''(англ.)''
* [http://www.catb.org/~esr/jargon/html/X/xor.html XOR на The Jargon File] ''(англ.)''
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.2490 XOR (x-or)] в стандарте ANS Forth ''(англ.)''
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.2490 XOR (x-or)] в стандарте ANS Forth ''(англ.)''
* Слово [http://forth-standard.org/standard/core/XOR XOR (x-or)] в черновике Forth 200x ''(англ.)''
* Слово [http://www.forth200x.org/documents/html3/core/XOR.html XOR (x-or)] в черновике 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://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\07.TISLO%20TIPOW%20TISEL ЧИСЛО ТИПОВ ЧИСЕЛ] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»]




{{нет иллюстраций}}
{{заготовка}}
{{заготовка}}
[[Категория:Слова Каллисто]]
[[Категория:Слова Каллисто]]
[[Категория:Примитивы]]
[[Категория:Логические операции Каллисто]]
[[Категория:Логические операции Каллисто]]
[[Категория:Усовершенствованные слова]]
[[Категория:Описание бета-версии Каллисто]]
[[Категория:Стандартные слова]]
[[Категория:1994 CORE]]
[[Категория:2012 CORE]]
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Pmkwiki:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

В целях защиты вики от автоматического спама в правках просим вас решить следующую каптчу:

Отменить Справка по редактированию (в новом окне)
Источник — https://pmk.the-hacker.ru/XOR