OR
OR (или, читается «ор») — стандартное слово Каллисто. 32-битное поразрядное логическое сложение.
OR ( n1 n2 −− i ) 32−битное логическое сложение (или). i := n1 ∨ n2
Выполняет 32-битное логическое «или» (дизъюнкцию) двух целых чисел n1 и n2, кладёт на стек результат i в дополнительном коде.
Другими словами, каждый из 32 битов числа n1 сравнивается с соответствующим битом числа n2 и, если один из них или оба равны единице, в соответствующий бит числа i заносится единица. В противном случае, когда оба рассматриваемых бита равны нулю, соответствующий бит результата i тоже будет равен нулю.
Ввод слова OR[править]
В режиме ЛАТ последовательно нажмите две белые клавиши 5 ×
OR в стандарте ANS Forth[править]
6.1.1980 OR CORE ( x1 x2 -- x3 ) x3 - поразрядное включающее или x1 и x2.
История[править]
Слово OR является одним из самых древних сохранившихся слов Форта.
В 1968 году Чак Мур работал в Mohasco Industries, Inc (Amsterdam NY, англ.). Первая версия интерпретатора, получившая название FORTH, заработала на миникомпьютере IBM 1130 с графическим дисплеем 2250 (16-битный процессор с ОЗУ 8К, дисководом, клавиатурой, принтером и ридером/панчером перфокарт). Первый FORTH знал слово OR
Позже было реализовано Чаком Муром для 2К×48бит версии Форта на Burroughs B-5500 в 1970 году.
В colorForth слово OR начало означать исключающее «или» (XOR).
В отечественных калькуляторах команда OR претерпела большие изменения. В советских ПМК команда К∨ осуществляла побитовое логическое или во всех тетрадах мантиссы в формате bcd, кроме старшей. В «Электронике МК-152» команда получила более практичное назначение и новое имя K OR, сохранив свой код операции. Команда K OR стала работать с 8-битными двоичными числами. Именно на её основе удалось реализовать стандартное слово OR для работы с 32-битными целыми.
OR в предыдущем стандарте Forth-83 (англ.)[править]
OR 16b1 16b2 -- 16b3 79 16b3 is the bit-by-bit inclusive-or of 16b1 with 16b2.
OR в стандарте Forth-79 (англ.)[править]
OR n1 n2 -- n3 223 Leave the bitwise inclusive-or of two numbers.
OR в fig-FORTH Release 1 glossary, май 1979 (англ.)[править]
OR n1 n2 -- or L0 Leave the bit-wise logical or of two l6 bit values.
Реализация[править]
В Каллисто для записи 32-битных целых чисел в десятичном стеке используется дополнительный код (англ. two's complement). На входе слово OR принимает как 32-битные целые в дополнительном коде, так и беззнаковые целые. Результат i всегда представлен в дополнительном коде и отрицателен, если старший бит в нём установлен.
OR даёт правильный результат побитового «или» над числами любой разрядности, меньшей 32, включая 16-, 8- и 1-битные числа. Если оба аргумента разрядности меньше, чем 32, представлены в дополнительном коде, результат i также выдаётся в дополнительном коде. Если оба аргумента представлены в беззнаковом виде, результат также будет в беззнаковом виде — положительным числом или нулём.
Также слово OR можно использовать для логической операции «или» над флагами, если значение «истина» представляется числом -1. Все стандартные слова Каллисто, возвращающие логическое значение (например, команды сравнения), используют это значение для возвращаемого флага «истина».
В Каллисто 1.0 слово OR реализовано с использованием команды ЭКВМ K OR:
1481 ; Приводит 32−битное число в беззнаковый вид. 1482 Norm32: FX<0 N32A 1483 65536 FX^2 + ; FX^2 vs ENT ∗ 1484 N32A: RTN 1485 1486 ;#OR 1487 ; OR ( n1 n2 −− i ) 32−битное логическое сложение (или). i := n1 ∨ n2 1488 LSOR: .DB 2 1489 .TEXT "OR" ; ( a b −− a OR b ) 1490 .DW LSAND ; 32−битное побитовое логическое сложение (ИЛИ). 1491 SOR: .DW JSOR 1492 JSOR: RM3 MB 1 M1 + MA M3 1493 CX M8 4 M0 1494 KRMB GSB Norm32 MB 1495 KRMA GSB Norm32 MA 1496 GOTO SORIN 1497 SORL: M8 RM1 RME ∗ M1 1498 RMA 1499 SORIN: ENT RME / FANS <−> KINT MA ∗ − 1500 RMB ENT RME / FANS <−> KINT MB ∗ − 1501 KOR RM1 ∗ RM8 + 1502 PFL0 SORL 1503 GSB Sign32 1504 PKM03 KGOTO9 1505 ; 1506 ; Преобразование 32−битного беззнакового в 32−битное знаковое. 1507 Sign32: 1508 32768 ENT 65536 ∗ ; 2 147 483 648 1509 − FX<0 S32Fix 1510 FANS + RTN ; Восстановить исходное число 1511 S32Fix: FANS − RTN ; Преобразовать
Реализация из SP-Forth 4.20:
CODE OR ( x1 x2 -- x3 ) \ 94 \ x3 - побитовое "ИЛИ" x1 и x2. OR EAX, [EBP] LEA EBP, 4 [EBP] RET END-CODE
Советская реализация[править]
Слово OR в ФОРТ-ЕС было примитивом. Вот его описание и определение:
OR W1,W2->W3 ПОРАЗРЯДНОЕ ЛОГИЧЕСКОЕ "ИЛИ" 13 Экран номер 13 ( 31.03.86 AND OR XOR NOT 0= 0< ) CODE OR ( W1,W2->W3) 14 LHRW12 BAL, RW1 RW2 OR, POPPUT1 B, END-CODE
В FORTH ИТЭФ слово OR также было примитивом, вот его определение:
HEAD 203Q,'AN',304Q,$AND ; AND POP AX POP CX AND AX, CX ENDA: PUSH AX NEXT HEAD 202Q,'O',322Q,$OR ; OR POP AX POP CX OR AX, CX JMP ENDA
Ссылки[править]
- Исходный текст слова OR в Каллисто Классик 1.0
- См. слова AND, XOR и NOT
- Дизъюнкция, Логика высказываний и Битовые операции в Википедии
- Слово OR в стандарте ANS Forth (англ.)
- Слово OR в черновике Forth 200x (англ.)
- КОМПЬЮТЕР "ПРИНИМАЕТ РЕШЕНИЯ" в книге Л.Броуди «Начальный курс программирования на языке Форт»
- ЧИСЛО ТИПОВ ЧИСЕЛ в книге Л.Броуди «Начальный курс программирования на языке Форт»
- Decisions, Decisions… в книге Leo Brodie Starting Forth (англ.)
- A Number of Kinds of Numbers в книге Leo Brodie Starting Forth (англ.)
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |