Текущая версия |
Ваш текст |
Строка 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}}]] [[Клавиша ÷|{{Серая клавиша|÷}}]] [[Клавиша Р-ГРД-Г|{{Чёрная клавиша|Р-ГРД-Г}}]] [[Клавиша ÷|{{Серая клавиша|÷}}]] [[Клавиша 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]]
| |