Слово /MOD: различия между версиями
Перейти к навигации
Перейти к поиску
AtH (обсуждение | вклад) (→Ссылки) |
AtH (обсуждение | вклад) |
||
(не показаны 24 промежуточные версии этого же участника) | |||
Строка 1: | Строка 1: | ||
'''/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»]] | [[Файл:samurai.jpg|thumb|right|349px|Самурай /MOD (старший брат слэша).<br>Картинка из книги Лео Броди «Starting FORTH»]] | ||
Деление с остатком y на x. Занесение в [[Стек данных|стек]] остатка y1 и частного n. | |||
== Ввод слова /MOD == | == Ввод слова /MOD == | ||
Строка 10: | Строка 11: | ||
== /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 ) | ||
Строка 19: | Строка 21: | ||
См.: 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 в предыдущем стандарте Forth-83 (англ.) == | Слово /MOD возвращало и частное, и остаток — являясь идеальным для определения местонахождения записей в файле. | ||
=== /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 | ||
Строка 29: | Строка 36: | ||
{-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. | ||
== Реализация == | |||
<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:// | * Слово [http://forth-standard.org/standard/core/DivMOD /MOD (slash-mod)] в черновике Forth 200x ''(англ.)'' | ||
* Слово [http:// | * Слово [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:// | * Слово [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]] |
Текущая версия от 17:00, 10 ноября 2017
/MOD (деление с остатком) — стандартное слово Каллисто.
/MOD ( y x −− y1 n ) Делить y на x с частным n и остатком y1. n := Trunc [y/x], y1 := y mod x
Деление с остатком y на x. Занесение в стек остатка y1 и частного n.
Ввод слова /MOD[править]
В режиме NUM последовательно нажмите клавиши F ÷ Р-ГРД-Г ÷ 5 K
Для возврата в режим NUM нажмите синюю клавишу P .
/MOD в стандарте ANS Forth[править]
6.1.0240 /MOD "slash-mod" CORE ( n1 n2 -- n3 n4 ) Делит n1 на n2, возвращает остаток одна-ячейка n3 и частное одна- ячейка n4. Неопределенная ситуация существует, если n2 нулевое. Если n1 и n2 отличаются по знаку, возвращенный результат, определенный реализацией будет тот же самый, как и возвращаемый фразой >R S>D R> FM/MOD или фразой >R S>D R> SM/REM. См.: 3.2.2.1 Целочисленное деление.
История[править]
Впервые слово /MOD появилось в Форте 1971-73 годах, когда Чак Мур перенёс транслятор на DEC PDP-11 в National Radio Astronomy Observatory (англ., Шарлотсвилл).
Слово /MOD возвращало и частное, и остаток — являясь идеальным для определения местонахождения записей в файле.
/MOD в предыдущем стандарте Forth-83 (англ.)[править]
/MOD n1 n2 -- n3 n4 83 "divide-mod" n3 is the remainder and n4 the floor of the quotient of n1 divided by the divisor n2. n3 has the same sign as n2 or is zero. An error condition results if the divisor is zero or if the quotient falls outside of the range {-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.
Реализация[править]
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
Реализация из SP-Forth 4.20:
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
Советская реализация[править]
Слово /MOD в FORTH ИТЭФ и ФОРТ-ЕС определялось одинаково, через примитив M/
Вот описания и определения этих двух слов в ФОРТ-ЕС:
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/ ;
Вот определения этих двух слов в FORTH ИТЭФ:
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
Ссылки[править]
- Исходный текст слова /MOD в Каллисто Классик 1.0
- Слово /MOD (slash-mod) в стандарте ANS Forth (англ.)
- Слово /MOD (slash-mod) в черновике Forth 200x (англ.)
- Слово FM/MOD (f-m-slash-mod) и комментарий к нему в черновике Forth 200x (англ.)
- Слово SM/REM (s-m-slash-rem) и комментарий к нему в черновике Forth 200x (англ.)
- ВЫПОЛНЕНИЕ АРИФМЕТИЧЕСКИХ ОПЕРАЦИЙ в книге Л.Броуди «Начальный курс программирования на языке Форт»
- How to Get Results в книге Leo Brodie Starting Forth (англ.)
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |