2/: различия между версиями

Материал из ПМК вики
Перейти к навигации Перейти к поиску
 
(не показано 5 промежуточных версий этого же участника)
Строка 1: Строка 1:
'''2/''' (на два делить нацело, читается «два дробь») — стандартное слово [[Каллисто]]. Целочисленное деление на 2 (двоичный сдвиг вправо).
'''2/''' (на два делить нацело, читается «два-дробь») — стандартное слово [[Каллисто]]. Целочисленное деление на 2 (двоичный сдвиг вправо).
  2/            ( x -- n )                      Половина. n ← [x/2]
  2/            ( x -- n )                      Половина. n ← [x/2]
[[Файл:CallistoTwo.png|thumb|right|264px|Пример работы слова 2/]]
[[Файл:CallistoTwo.png|thumb|right|264px|Пример работы слова 2/]]
Строка 6: Строка 6:
== Ввод слова 2/ ==
== Ввод слова 2/ ==
В [[Режим NUM|режиме NUM]] последовательно нажмите три клавиши [[Клавиша 2|{{Серая клавиша|2}}]]   [[Клавиша F|{{Оранжевая клавиша|F}}]] [[Клавиша ÷|{{Серая клавиша|÷}}]]
В [[Режим NUM|режиме NUM]] последовательно нажмите три клавиши [[Клавиша 2|{{Серая клавиша|2}}]]   [[Клавиша F|{{Оранжевая клавиша|F}}]] [[Клавиша ÷|{{Серая клавиша|÷}}]]
== Детали реализации ==
Слово 2/ осуществляет арифметический сдвиг вправо на один двоичный разряд — сохраняя знак всех целых чисел, кроме 1.  [[2×|Слово 2×]] осуществляет обратное действие, двоичный сдвиг влево.
[[Каллисто]] реализована поверх десятичной машины [[«Электроника МК-161»]], поэтому поведение этих двух команд может не всегда соответствовать тому, как они реализованы на двоичных форт-машинах.


== 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 )
Строка 22: Строка 18:
  как 2∗. Оно часто реализовано на машинах с дополнительным кодом (дополнение до  
  как 2∗. Оно часто реализовано на машинах с дополнительным кодом (дополнение до  
  двух) аппаратным сдвигом вправо, который распространяет знаковый разряд.
  двух) аппаратным сдвигом вправо, который распространяет знаковый разряд.
</PRE>


== История ==
== История ==
Строка 35: Строка 32:


== Реализация ==
== Реализация ==
Слово 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/ в ФОРТ-ЕС было [[примитив]]ом. Вот его описание и определение:
Слово 2/ в ФОРТ-ЕС было [[примитив]]ом. Вот его описание и определение:
<PRE>
<PRE>
Строка 75: Строка 94:
[[Категория:Одноместные операции Каллисто]]
[[Категория:Одноместные операции Каллисто]]
[[Категория:Операции целочисленного деления Каллисто]]
[[Категория:Операции целочисленного деления Каллисто]]
[[Категория:Стандартные слова]]
[[Категория:1994 CORE]]
[[Категория:2012 CORE]]

Текущая версия от 17:01, 10 ноября 2017

2/ (на два делить нацело, читается «два-дробь») — стандартное слово Каллисто. Целочисленное деление на 2 (двоичный сдвиг вправо).

2/             ( x -- n )                      Половина. n ← [x/2]
Пример работы слова 2/

Делит x на 2. Отбрасывает остаток (цифры после запятой), а частное n заносит в стек.

Ввод слова 2/[править]

В режиме NUM последовательно нажмите три клавиши  2     F   ÷ 

2/ в стандарте ANS Forth[править]

 6.1.0330   2/                                "two-slash"                   CORE
            ( x1 -- x2 )
            x2 - результат смещения x1 на один бит к младшему двоичному 
            разряду, оставляет старший бит неизменным.

 A.6.1.0330   2/
 Это слово имеет то же самое общее использование и следствие неверного названия 
 как 2∗. Оно часто реализовано на машинах с дополнительным кодом (дополнение до 
 двух) аппаратным сдвигом вправо, который распространяет знаковый разряд.

История[править]

2/ в предыдущем стандарте Forth-83 (англ.)[править]

     2/           n1 -- n2                      83        "two-divide"
          n2 is the result of arithmetically shifting n1 right one
          bit.  The sign is included in the shift and remains
          unchanged.

2/ в стандарте Forth-79 (англ.)[править]

2/             n1 -- n2                                "two-divide"
    Leave (n1)/2.

Реализация[править]

Слово 2/ осуществляет арифметический сдвиг вправо на один двоичный разряд — сохраняя знак всех целых чисел, кроме 1. Слово 2× осуществляет обратное действие, двоичный сдвиг влево.

Каллисто 1.0 реализована поверх десятичной машины «Электроника МК-161», поэтому поведение этих двух команд может не всегда соответствовать тому, как они реализованы на двоичных форт-машинах:

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 (двоичный сдвиг вправо).

Реализация из SP-Forth 4.20:

CODE 2/ ( x1 -- x2 ) \ 94
\ x2 - результат сдвига x1 на один бит вправо без изменения старшего бита.
     D1 C, F8 C,  \    SAR EAX, # 1
     RET
END-CODE

Советская реализация[править]

Слово 2/ в ФОРТ-ЕС было примитивом. Вот его описание и определение:

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

В FORTH ИТЭФ слово 2/ было примитивом, вот его определение:

             HEAD    202Q,'2',257Q,DIV2                   ; 2/
             POP   AX
             SAR   AX, 1
             PUSH  AX
             NEXT

Ссылки[править]


  Это заготовка статьи. Вы можете помочь проекту, дополнив её.