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

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

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

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


== Ввод слова /MOD ==
== Ввод слова /MOD ==
Строка 11: Строка 10:


== /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: Строка 19:


         См.: 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: Строка 28:
           {-32,768..32,767}.  See:  "division, floored"
           {-32,768..32,767}.  See:  "division, floored"


=== /MOD в стандарте Forth-79 (англ.) ===
== /MOD в стандарте Forth-79 (англ.) ==
  /MOD          n1 n2 -- n3 n4                198      "divide-mod"
  /MOD          n1 n2 -- n3 n4                198      "divide-mod"
     Divide  n1 by n2 and leave the remainder n3 and  quotient  n4.
     Divide  n1 by n2 and leave the remainder n3 and  quotient  n4.
     n3 has the same sign as n1.
     n3 has the same sign as n1.


=== /MOD в fig-FORTH Release 1 glossary, май 1979 (англ.) ===
== /MOD в fig-FORTH Release 1 glossary, май 1979 (англ.) ==
  /MOD          n1 n2 --- rem quot              L0
  /MOD          n1 n2 --- rem quot              L0
         Leave the remainder and signed quotient of n1/n2. The remainder has
         Leave the remainder and signed quotient of n1/n2. The remainder has
         the sign of the dividend.
         the sign of the dividend.
== История ==
Впервые слово /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 возвращало и частное, и остаток — являясь идеальным для определения местонахождения записей в файле.


== Реализация ==
== Реализация ==
<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/
Слово /MOD в FORTH ИТЭФ и ФОРТ-ЕС определялось одинаково, через [[примитив]] M/


Строка 110: Строка 81:


== Ссылки ==
== Ссылки ==
* {{Исходник|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://forth-standard.org/standard/core/DivMOD /MOD (slash-mod)] в черновике Forth 200x ''(англ.)''
* Слово [http://www.forth200x.org/documents/html3/core/DivMOD.html /MOD (slash-mod)] в черновике Forth 200x ''(англ.)''
* Слово [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://www.forth200x.org/documents/html3/core/FMDivMOD.html FM/MOD (f-m-slash-mod)] и [http://www.forth200x.org/documents/html3/rationale.html#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://www.forth200x.org/documents/html3/core/SMDivREM.html SM/REM (s-m-slash-rem)] и [http://www.forth200x.org/documents/html3/rationale.html#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://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] ''(англ.)''
* [http://www.forth.com/starting-forth/sf2/sf2.html How to Get Results] в книге [http://www.forth.com/starting-forth/ Leo Brodie Starting Forth] ''(англ.)''
Строка 124: Строка 94:
[[Категория:Арифметические операции Каллисто]]
[[Категория:Арифметические операции Каллисто]]
[[Категория:Операции целочисленного деления Каллисто]]
[[Категория:Операции целочисленного деления Каллисто]]
[[Категория:Стандартные слова]]
[[Категория:Слова Каллисто без стековых диаграмм]]
[[Категория:1994 CORE]]
[[Категория:2012 CORE]]
Пожалуйста, учтите, что любой ваш вклад в проект «ПМК вики» может быть отредактирован или удалён другими участниками. Если вы не хотите, чтобы кто-либо изменял ваши тексты, не помещайте их сюда.
Вы также подтверждаете, что являетесь автором вносимых дополнений, или скопировали их из источника, допускающего свободное распространение и изменение своего содержимого (см. Pmkwiki:Авторские права). НЕ РАЗМЕЩАЙТЕ БЕЗ РАЗРЕШЕНИЯ ОХРАНЯЕМЫЕ АВТОРСКИМ ПРАВОМ МАТЕРИАЛЫ!

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

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