Текущая версия |
Ваш текст |
Строка 1: |
Строка 1: |
| '''2/''' (на два делить нацело, читается «два-дробь») — стандартное слово [[Каллисто]]. Целочисленное деление на 2 (двоичный сдвиг вправо). | | '''2/''' — стандартное слово [[Каллисто]]. |
| 2/ ( x -- n ) Половина. n ← [x/2]
| | |
| [[Файл:CallistoTwo.png|thumb|right|264px|Пример работы слова 2/]]
| | Целочисленное деление на 2 (двоичный сдвиг вправо). |
| Делит x на 2. Отбрасывает остаток (цифры после запятой), а частное n заносит в [[Стек данных|стек]].
| |
|
| |
|
| == Ввод слова 2/ ==
| |
| В [[Режим NUM|режиме NUM]] последовательно нажмите три клавиши [[Клавиша 2|{{Серая клавиша|2}}]] [[Клавиша F|{{Оранжевая клавиша|F}}]] [[Клавиша ÷|{{Серая клавиша|÷}}]]
| |
|
| |
|
| == 2/ в стандарте ANS Forth == | | == 2/ в стандарте ANS Forth == |
| <PRE>
| |
| 6.1.0330 2/ "two-slash" CORE | | 6.1.0330 2/ "two-slash" CORE |
| ( x1 -- x2 ) | | ( x1 -- x2 ) |
Строка 18: |
Строка 14: |
| как 2∗. Оно часто реализовано на машинах с дополнительным кодом (дополнение до | | как 2∗. Оно часто реализовано на машинах с дополнительным кодом (дополнение до |
| двух) аппаратным сдвигом вправо, который распространяет знаковый разряд. | | двух) аппаратным сдвигом вправо, который распространяет знаковый разряд. |
| </PRE>
| |
|
| |
|
| == История ==
| | |
| === 2/ в предыдущем стандарте Forth-83 (англ.) ===
| | == 2/ в предыдущем стандарте Forth-83 (англ.) == |
| 2/ n1 -- n2 83 "two-divide" | | 2/ n1 -- n2 83 "two-divide" |
| n2 is the result of arithmetically shifting n1 right one | | n2 is the result of arithmetically shifting n1 right one |
Строка 27: |
Строка 22: |
| unchanged. | | unchanged. |
|
| |
|
| === 2/ в стандарте Forth-79 (англ.) ===
| |
| 2/ n1 -- n2 "two-divide"
| |
| Leave (n1)/2.
| |
|
| |
| == Реализация ==
| |
| Слово 2/ осуществляет арифметический сдвиг вправо на один двоичный разряд — сохраняя знак всех целых чисел, кроме 1. [[2×|Слово 2×]] осуществляет обратное действие, двоичный сдвиг влево.
| |
|
| |
| [[Каллисто|Каллисто 1.0]] реализована поверх десятичной машины [[«Электроника МК-161»]], поэтому поведение этих двух команд может не всегда соответствовать тому, как они реализованы на двоичных форт-машинах:
| |
| <pre>
| |
| 1314 ;#TwoDiv
| |
| 1315 ; 2/ ( x −− n ) Половина. n := Trunc [x/2]
| |
| 1316 LDIV2: .DB 2
| |
| 1317 .TEXT "2/" ; ( n −− [n/2] )
| |
| 1318 .DW LMUL2
| |
| 1319 DIV2: .DW JDIV2
| |
| 1320 JDIV2: PKRM03 2 / KINT PKM03 KGOTO9 ; Целочисленное деление на 2 (двоичный сдвиг вправо).
| |
| </pre>
| |
| Реализация из SP-Forth 4.20:
| |
| <pre>
| |
| CODE 2/ ( x1 -- x2 ) \ 94
| |
| \ x2 - результат сдвига x1 на один бит вправо без изменения старшего бита.
| |
| D1 C, F8 C, \ SAR EAX, # 1
| |
| RET
| |
| END-CODE
| |
| </pre>
| |
|
| |
| === Советская реализация ===
| |
| Слово 2/ в ФОРТ-ЕС было [[примитив]]ом. Вот его описание и определение:
| |
| <PRE>
| |
| 2/ W1->W2 АРИФМЕТИЧЕСКИЙ СДВИГ ВПРАВО НА 1 20
| |
|
| |
| Экран номер 20
| |
| ( 31.03.86 SP@ SP! RP@ RP! 2/ 2* 2@ 2! DEPTH )
| |
|
| |
| CODE 2/ ( W1->W2 ) RW1 PULL, RW1 1 SRA, PUTRM1 B, END-CODE
| |
| </PRE>
| |
|
| |
| В FORTH ИТЭФ слово 2/ было [[примитив]]ом, вот его определение:
| |
| <PRE>
| |
| HEAD 202Q,'2',257Q,DIV2 ; 2/
| |
| POP AX
| |
| SAR AX, 1
| |
| PUSH AX
| |
| NEXT
| |
| </PRE>
| |
|
| |
|
| == Ссылки == | | == Ссылки == |
| * {{Исходник|TwoDiv|2/}} | | * [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0330 Слово 2/ (two-slash) в стандарте ANS Forth] ''(англ.)'' и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.1.0330 комментарии к нему] ''(англ.)'' |
| * См. слова [[Слово /|/]], [[2×]], [[2+]] и [[2−]]
| | * [http://www.forth200x.org/documents/html/core.html#core:2/ Слово 2/ (two-slash) в черновике Forth 200x] ''(англ.)'' |
| * См. также [[символ /]]
| |
| * Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0330 2/ (two-slash)] и [http://forth.sourceforge.net/standard/dpans/dpansa6.htm#A.6.1.0330 комментарии к нему] в стандарте ANS Forth ''(англ.)''
| |
| * Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.2162 RSHIFT] в стандарте ANS Forth ''(англ.)'' | |
| * Слова [http://forth-standard.org/standard/core/TwoDiv 2/ (two-slash)] и [http://forth-standard.org/standard/core/RSHIFT RSHIFT] в черновике Forth 200x ''(англ.)''
| |
| * [https://ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82%D0%BE%D0%B2%D1%8B%D0%B9_%D1%81%D0%B4%D0%B2%D0%B8%D0%B3 Битовый сдвиг в Википедии] | | * [https://ru.wikipedia.org/wiki/%D0%91%D0%B8%D1%82%D0%BE%D0%B2%D1%8B%D0%B9_%D1%81%D0%B4%D0%B2%D0%B8%D0%B3 Битовый сдвиг в Википедии] |
| * [https://en.wikipedia.org/wiki/Logical_shift Logical shift] и [https://en.wikipedia.org/wiki/Arithmetic_shift Arithmetic shift] в английской Википедии ''(англ.)'' | | * [https://en.wikipedia.org/wiki/Logical_shift Logical shift] ''(англ.)'' и [https://en.wikipedia.org/wiki/Arithmetic_shift Arithmetic shift] ''(англ.)'' в английской Википедии |
| * [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\05.OPERAZII%20NAD%20ZELYMI%20TISLAMI ОПЕРАЦИИ НАД ЦЕЛЫМИ ЧИСЛАМИ] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»] | | * См. также слова [[2×]] [[2÷]] |
| * [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 Л.Броуди «Начальный курс программирования на языке Форт»]
| |
| * [http://www.forth.com/starting-forth/sf5/sf5.html The Philosophy of Fixed Point] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''
| |
| * [http://www.forth.com/starting-forth/sf7/sf7.html A Number of Kinds of Numbers] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''
| |
|
| |
|
|
| |
|
| | {{нет иллюстраций}} |
| {{заготовка}} | | {{заготовка}} |
| [[Категория:Слова Каллисто]] | | [[Категория:Слова Каллисто]] |
| [[Категория:Примитивы]]
| |
| [[Категория:Арифметические операции Каллисто]] | | [[Категория:Арифметические операции Каллисто]] |
| [[Категория:Одноместные операции Каллисто]] | | [[Категория:Одноместные операции Каллисто]] |
| [[Категория:Операции целочисленного деления Каллисто]] | | [[Категория:Операции целочисленного деления Каллисто]] |
| [[Категория:Стандартные слова]]
| |
| [[Категория:1994 CORE]]
| |
| [[Категория:2012 CORE]]
| |