×/MOD
Перейти к навигации
Перейти к поиску
×/MOD (масштабирование с остатком) — адаптированное слово Каллисто. Операция масштабирования с остатком.
×/MOD ( z y x −− y1 n ) Получение частного n и остатка y1 от деления произведения z × y на x.
Слово ×/MOD кладёт на стек остаток и частное от деления произведения z × y на x. Произведение z × y вычисляется с точностью 14 десятичных знаков.
Ввод слова ×/MOD
В режиме NUM последовательно нажмите клавиши × F ÷ Р-ГРД-Г ÷ 5 K
Для возврата в режим NUM нажмите синюю клавишу P .
∗/MOD в стандарте ANS Forth
6.1.0110 ∗/MOD "star-slash-mod" CORE ( n1 n2 n3 -- n4 n5 ) Умножает n1 на n2, с промежуточным результатом двойная-ячейка d. Делит d на n3, выдает остаток одна-ячейка n4 и частное одна-ячейка n5. Неопределенная ситуация существует, если n3 нулевое или если частное n5 находится вне диапазона числа одна-ячейка со знаком. Если d и n3 отличаются по знаку, возвращенный результат, определенный реализацией будет тот же самый, как и возвращаемый фразой >R M∗ R> FM/MOD или фразой >R M∗ R> SM/REM. См.: 3.2.2.1 Целочисленное деление.
История
Слово ×/MOD в Форте называется ∗/MOD и прослеживается с 1979 года.
∗/MOD в предыдущем стандарте Forth-83 (англ.)
∗/MOD n1 n2 n3 -- n4 n5 83 "times-divide-mod" n1 is first multiplied by n2 producing an intermediate 32- bit result. n4 is the remainder and n5 is the floor of the quotient of the intermediate 32-bit result divided by the divisor n3. A 32-bit intermediate product is used as for ∗/ . n4 has the same sign as n3 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 n5 192 "times-divide-mod" Multiply n1 by n2, divide the result by n3 and leave the remainder n4 and quotient n5. A 32-bit intermediate product is used as for ∗/ . The remainder has the same sign as n1.
∗/MOD в fig-FORTH Release 1 glossary, май 1979 (англ.)
∗/MOD n1 n2 n3 --- n4 n5 L0 Leave the quotient n5 and remainder n4 of the operation n1∗n2/n3 A 31 bit intermediate product is used as for ∗/.
Реализация
1412 ;#TimesSlashMOD 1413 ; ×/MOD ( z y x −− y1 n ) Получить частное n и остаток y1 от деления произведения z×y на x. 1414 ; Остаток y1 и частное n от деления произведения z∗y на x. 1415 ; Промежуточный результат z∗y содержит 14 десятичных разрядов. 1416 LSSMOD: .DB 5 1417 .DB 179 ; Символ умножения МК−161. 1418 .TEXT "/MOD" ; "∗/MOD" ( множитель1 множитель2 делитель −− остаток частное) 1419 .DW LSSLA 1420 SSMOD: .DW JSSMOD 1421 JSSMOD: RM3 M8 1 + MA M3 1 + MB 1422 KRMB KRMA ∗ ENT KRM8 / FANS <−> KINT KMA ∗ − KMB 1423 KGOTO9
Реализация из SP-Forth 4.20:
CODE */MOD ( n1 n2 n3 -- n4 n5 ) \ 94 \ Умножить n1 на n2, получить промежуточный двойной результат d. \ Разделить d на n3, получить остаток n4 и частное n5. MOV ECX, EAX MOV EAX, [EBP] \ n2 IMUL DWORD 4 [EBP] \ n1*n2 IDIV ECX \ n1*n2/n3 MOV 4 [EBP], EDX \ rem LEA EBP, 4 [EBP] RET END-CODE
Советская реализация
Слово ×/MOD ФОРТ-ЕС и FORTH ИТЭФ называлось ∗/MOD и определялось через примитивы M∗ и M/
Вот описания и определения этих слов в ядре ФОРТ-ЕС:
*/MOD N1,N2,N3->N4,N5 ОСТАТОК N4 И ЧАСТНОЕ N5 18 ОТ ДЕЛЕНИЯ ПРОИЗВЕДЕНИЯ N1*N2 НА N3 M* T N1,N2->D ПРОИЗВЕДЕНИЕ ДВОЙНОЙ ДЛИНЫ N1 И N2 18 M/ * D,N1->N2,N3 ОСТАТОК N2 И ЧАСТНОЕ N3 ОТ 18 ДЕЛЕНИЯ ДВОЙНОГО D НА ОДИНАРНОЕ N1 Экран номер 18 ( 03.10.84 М* M/ * /MOD / MOD */MOD */) CODE M* ( N1,N2->D) RH1 SECOND LH, RW1 FIRST MH, 2PUTRW1 B, 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,N5) >R M* R> M/ ;
Вот описания и определения этих слов в FORTH ИТЭФ:
HEAD 202Q,'M',252Q,MSTAR ; M* POP AX POP CX IMUL CX PUSH AX PUSH DX NEXT ... HEAD 202Q,'M',257Q,MSLAS ; M/ POP CX ; Делимое POP DX POP AX IDIV CX PUSH DX PUSH AX NEXT ... HEAD 205Q,'*/MO',304Q,SSMOD,$COL ; */MOD DW TOR,MSTAR,FROMR,MSLAS,SEMI
Ссылки
- Исходный текст слова ×/MOD в Каллисто Классик 1.0
- Слово ∗/MOD (star-slash-mod) в стандарте ANS Forth (англ.)
- Слово ∗/MOD (star-slash-mod) в черновике Forth 200x (англ.)
- ОПЕРАЦИИ НАД ЦЕЛЫМИ ЧИСЛАМИ в книге Л.Броуди «Начальный курс программирования на языке Форт»
- The Philosophy of Fixed Point в книге Leo Brodie Starting Forth (англ.)
У этой статьи нет иллюстраций. Вы можете помочь проекту, добавив их. |
Это заготовка статьи. Вы можете помочь проекту, дополнив её. |