Редактирование: Слово /MOD

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

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

Текущая версия Ваш текст
Строка 1: Строка 1:
'''/MOD''' (деление с остатком) — стандартное слово [[Каллисто]].
'''/MOD''' — стандартное слово [[Каллисто]].
/MOD          ( y x −− y1 n )                      Делить y на x с частным n и остатком y1.
                                                    n := Trunc [y/x], y1 := y mod x
[[Файл:samurai.jpg|thumb|right|349px|Самурай /MOD (старший брат слэша).<br>Картинка из книги Лео Броди «Starting FORTH»]]
Деление с остатком y на x. Занесение в [[Стек данных|стек]] остатка y1 и частного n.


== Ввод слова /MOD ==
Деление с остатком a на b.
В [[Режим NUM|режиме NUM]] последовательно нажмите клавиши [[Клавиша F|{{Оранжевая клавиша|F}}]] [[Клавиша ÷|{{Серая клавиша|÷}}]] &nbsp; [[Клавиша Р-ГРД-Г|{{Чёрная клавиша|Р-ГРД-Г}}]] [[Клавиша ÷|{{Серая клавиша|÷}}]] [[Клавиша 5|{{Серая клавиша|5}}]] [[Клавиша K|{{Синяя клавиша|K}}]]


Для возврата в [[режим NUM]] нажмите [[Клавиша P|синюю клавишу {{Синяя клавиша|P}}]].


== /MOD в стандарте ANS Forth ==
== /MOD в стандарте ANS Forth ==
<PRE>
  6.1.0240  /MOD                            "slash-mod"                    CORE
  6.1.0240  /MOD                            "slash-mod"                    CORE
             ( n1 n2 -- n3 n4 )
             ( n1 n2 -- n3 n4 )
Строка 21: Строка 14:


         См.: 3.2.2.1 Целочисленное деление.
         См.: 3.2.2.1 Целочисленное деление.
</PRE>


== История ==
Впервые слово /MOD появилось в Форте 1971-73 годах, когда Чак Мур перенёс транслятор на DEC PDP-11 в [https://en.wikipedia.org/wiki/National_Radio_Astronomy_Observatory National Radio Astronomy Observatory] (''англ.'', [https://ru.wikipedia.org/wiki/%D0%A8%D0%B0%D1%80%D0%BB%D0%BE%D1%82%D1%81%D0%B2%D0%B8%D0%BB%D0%BB_%28%D0%92%D0%B8%D1%80%D0%B3%D0%B8%D0%BD%D0%B8%D1%8F%29 Шарлотсвилл]).


Слово /MOD возвращало и частное, и остаток — являясь идеальным для определения местонахождения записей в файле.
== /MOD в предыдущем стандарте Forth-83 (англ.) ==
 
=== /MOD в предыдущем стандарте Forth-83 (англ.) ===
       /MOD        n1 n2 -- n3 n4                83        "divide-mod"
       /MOD        n1 n2 -- n3 n4                83        "divide-mod"
           n3 is the remainder and n4 the floor of the quotient of n1
           n3 is the remainder and n4 the floor of the quotient of n1
Строка 36: Строка 24:
           {-32,768..32,767}.  See:  "division, floored"
           {-32,768..32,767}.  See:  "division, floored"


=== /MOD в стандарте Forth-79 (англ.) ===
/MOD          n1 n2 -- n3 n4                198      "divide-mod"
    Divide  n1 by n2 and leave the remainder n3 and  quotient  n4.
    n3 has the same sign as n1.
=== /MOD в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
/MOD          n1 n2 --- rem quot              L0
        Leave the remainder and signed quotient of n1/n2. The remainder has
        the sign of the dividend.
== Реализация ==
<pre>
1388 ;#SlashMOD
1389 ; /MOD            ( y x −− y1 n )                      Делить y на x с частным n и остатком y1. n := Trunc [y/x], y1 := y mod x
1390 LSLMOD:        .DB    4
1391                .TEXT  "/MOD"                  ; ( делимое делитель −− остаток частное )
1392                .DW    LMOD
1393 SLMOD:          .DW    JSLMOD
1394 JSLMOD:        RM3 MB 1 + MA                  ; Деление с остатком делимого y на делитель x.
1395                KRMA ENT KRMB / FANS <−> KINT KMB ∗ − KMA
1396                KGOTO9
</pre>
Реализация из SP-Forth 4.20:
<pre>
CODE /MOD ( n1 n2 -- n3 n4 ) \ 94
\ Делить n1 на n2, дать остаток n3 и частное n4.
\ Неоднозначная ситуация возникает, если n2 нуль.
      MOV ECX, EAX
      MOV EAX, [EBP]
      CDQ
      IDIV ECX
      MOV [EBP], EDX
      RET
END-CODE
</pre>
=== Советская реализация ===
Слово /MOD в FORTH ИТЭФ и ФОРТ-ЕС определялось одинаково, через [[примитив]] M/
Вот описания и определения этих двух слов в ФОРТ-ЕС:
<PRE>
M/        *  D,N1->N2,N3      ОСТАТОК N2 И ЧАСТНОЕ N3 ОТ  16
                      ДЕЛЕНИЯ ДВОЙНОГО D НА ОДИНАРНОЕ N1
/MOD        N1,N2->N3,N4        ОСТАТОК N3 И ЧАСТНОЕ N4  16
                                      ОТ ДЕЛЕНИЯ N1 НА N2
                    Экран номер 18
( 03.10.84    М* M/ * /MOD / MOD */MOD */)
CODE M/ ( D,N1->N2,N3) 1 POP, 14 LRW1 SAL, RSTACK RTWO SR,
RW1 32 SRDA, 0,RW1 LR,  RW1 1 DR, 0 1 XR, 0 0 LTR, ?M IF,
RW1 1 AR, RW2 0 BCTR, THEN, RW1 FIRST 4 +(, STH,
RW1 RM2 LR,  ( ЧАСТНОЕ) POPPUT1 B,  END-CODE
: /MOD ( N1,N2->N3,N4) >R S>D R> M/ ;
</PRE>
Вот определения этих двух слов в FORTH ИТЭФ:
<PRE>
            HEAD    202Q,'M',257Q,MSLAS                  ; M/
            POP  CX          ; Делимое
            POP  DX
            POP  AX
            IDIV  CX
            PUSH  DX
            PUSH  AX
            NEXT
            ...
            HEAD    204Q,'/MO',304Q,SLMOD,$COL          ; /MOD
            DW  TOR,STOD,FROMR,MSLAS,SEMI
</PRE>


== Ссылки ==
== Ссылки ==
* {{Исходник|SlashMOD|/MOD}}
* [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0240 Слово /MOD (slash-mod) в стандарте ANS Forth] ''(англ.)''
* Слово [http://forth.sourceforge.net/standard/dpans/dpans6.htm#6.1.0240 /MOD (slash-mod)] в стандарте ANS Forth ''(англ.)''
* [http://www.forth200x.org/documents/html/core.html#core:/MOD Слово /MOD (slash-mod) в черновике Forth 200x] ''(англ.)''
* Слово [http://forth-standard.org/standard/core/DivMOD /MOD (slash-mod)] в черновике Forth 200x ''(англ.)''
* [http://www.forth200x.org/documents/html/core.html#core:FM/MOD Слово FM/MOD (f-m-slash-mod) в черновике Forth 200x] ''(англ.)'' и [http://www.forth200x.org/documents/html/rationale.html#rat:core:FM/MOD комментарий к нему] ''(англ.)''
* Слово [http://forth-standard.org/standard/core/FMDivMOD FM/MOD (f-m-slash-mod)] и [http://forth-standard.org/standard/rationale#rat:core:FM/MOD комментарий к нему] в черновике Forth 200x ''(англ.)''
* Слово [http://forth-standard.org/standard/core/SMDivREM SM/REM (s-m-slash-rem)] и [http://forth-standard.org/standard/rationale#rat:core:SM/REM комментарий к нему] в черновике Forth 200x ''(англ.)''
* [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH\02.WYPOLNENIE%20ARIFMETITESKIH%20OPERAZIJ ВЫПОЛНЕНИЕ АРИФМЕТИЧЕСКИХ ОПЕРАЦИЙ] в книге [http://gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=\6.PERWOISTOTNIKI\LEO%20BRODIE%20STARTING%20FORTH Л.Броуди «Начальный курс программирования на языке Форт»]
* [http://www.forth.com/starting-forth/sf2/sf2.html How to Get Results] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''




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

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

Отменить Справка по редактированию (в новом окне)