Home » Archimedes archive » Acorn Computing » 1994 09.adf » 9409 » TechForum/DivMod23

TechForum/DivMod23

This website contains an archive of files for the Acorn Electron, BBC Micro, Acorn Archimedes, Commodore 16 and Commodore 64 computers, which Dominic Ford has rescued from his private collection of floppy disks and cassettes.

Some of these files were originally commercial releases in the 1980s and 1990s, but they are now widely available online. I assume that copyright over them is no longer being asserted. If you own the copyright and would like files to be removed, please contact me.

Tape/disk: Home » Archimedes archive » Acorn Computing » 1994 09.adf » 9409
Filename: TechForum/DivMod23
Read OK:
File size: 06C9 bytes
Load address: 0000
Exec address: 0000
File contents
   10REM >DivMod23
   20:
   30MODE 0
   40DIM mod 1024
   50a=0:b=1:c=2:d=3
   60FOR pass%=0 TO 3 STEP 3
   70P%=mod
   80[       OPT     pass%
   90        ADDS    a,b,b           ;remove iff b always +'ve
  100        RSBCS   b,b,#0          ;remove iff b always +'ve
  110        ADC     d,d,d           ;remove iff b always +'ve
  120        ADD     a,b,b,LSR #2
  130        ADD     a,a,a,LSR #3
  140        SUB     a,a,b,LSR #6
  150        ADD     a,a,a,LSR #11
  160        ADD     a,a,a,LSR #22
  170        MOV     a,a,LSR #5
  180        ADD     c,a,a,ASL #1
  190        RSB     c,a,c,ASL #3
  200        SUB     c,b,c
  210        CMP     c,#23
  220        ADDGE   a,a,#1          ;remove if don't need quotient
  230        SUBGE   c,c,#23         ;remove if don't need remainder
  240        MOVS    d,d,ASR #1      ;remove iff b always +'ve
  250        RSBCS   a,a,#0          ;remove iff b always +'ve or don't need quotient
  260        RSBCS   c,c,#0          ;remove iff b always +'ve or don't need remainder
  270        RSBCS   b,b,#0          ;remove iff don't need to preserve sign of b or b always +'ve
  280        STR     c, m%
  290        MOV     pc,R14
  300.m%     EQUD    0
  310]
  320NEXT
  330B%=0
  340REPEAT
  350  B%=-B%
  360  C%=USR(mod)
  370  D%=B%DIV23: E%=B%MOD23
  380  IF C%<>D% OR !m%<>E% PRINT"******************************************************************":VDU 7
  390  PRINT B%,C%,!m%;"  ", D%,E%
  400  IF C%<>D% OR !m%<>E% PRINT"******************************************************************":VDU 7
  410  B%=-B%
  420  C%=USR(mod)
  430  D%=B%DIV23: E%=B%MOD23
  440  IF C%<>D% OR !m%<>E% PRINT"******************************************************************":VDU 7
  450  PRINT B%,C%,!m%;"  ", D%,E%
  460  IF C%<>D% OR !m%<>E% PRINT"******************************************************************":VDU 7
  470  B%+=1
  480UNTIL FALSE
  490END

� >DivMod23
:
� 0
(� mod 1024
2a=0:b=1:c=2:d=3
<� pass%=0 � 3 � 3
F
P%=mod
P[       OPT     pass%
Z=        ADDS    a,b,b           ;remove iff b always +'ve
d=        RSBCS   b,b,#0          ;remove iff b always +'ve
n=        ADC     d,d,d           ;remove iff b always +'ve
x         ADD     a,b,b,LSR #2
�         ADD     a,a,a,LSR #3
�         SUB     a,a,b,LSR #6
�!        ADD     a,a,a,LSR #11
�!        ADD     a,a,a,LSR #22
�        MOV     a,a,LSR #5
�         ADD     c,a,a,ASL #1
�         RSB     c,a,c,ASL #3
�        SUB     c,b,c
�        CMP     c,#23
�B        ADDGE   a,a,#1          ;remove if don't need quotient
�C        SUBGE   c,c,#23         ;remove if don't need remainder
�=        MOVS    d,d,ASR #1      ;remove iff b always +'ve
�T        RSBCS   a,a,#0          ;remove iff b always +'ve or don't need quotient
U        RSBCS   c,c,#0          ;remove iff b always +'ve or don't need remainder
a        RSBCS   b,b,#0          ;remove iff don't need to preserve sign of b or b always +'ve
        STR     c, m%
"        MOV     pc,R14
,.m%     EQUD    0
6]
@�
JB%=0
T�
^  B%=-B%
h  C%=�(mod)
r  D%=B%�23: E%=B%�23
|b  � C%<>D% � !m%<>E% �"******************************************************************":� 7
�  � B%,C%,!m%;"  ", D%,E%
�b  � C%<>D% � !m%<>E% �"******************************************************************":� 7
�  B%=-B%
�  C%=�(mod)
�  D%=B%�23: E%=B%�23
�b  � C%<>D% � !m%<>E% �"******************************************************************":� 7
�  � B%,C%,!m%;"  ", D%,E%
�b  � C%<>D% � !m%<>E% �"******************************************************************":� 7
�  B%+=1
�� �
��
�
00000000  0d 00 0a 0f f4 20 3e 44  69 76 4d 6f 64 32 33 0d  |..... >DivMod23.|
00000010  00 14 05 3a 0d 00 1e 07  eb 20 30 0d 00 28 0e de  |...:..... 0..(..|
00000020  20 6d 6f 64 20 31 30 32  34 0d 00 32 13 61 3d 30  | mod 1024..2.a=0|
00000030  3a 62 3d 31 3a 63 3d 32  3a 64 3d 33 0d 00 3c 15  |:b=1:c=2:d=3..<.|
00000040  e3 20 70 61 73 73 25 3d  30 20 b8 20 33 20 88 20  |. pass%=0 . 3 . |
00000050  33 0d 00 46 0a 50 25 3d  6d 6f 64 0d 00 50 19 5b  |3..F.P%=mod..P.[|
00000060  20 20 20 20 20 20 20 4f  50 54 20 20 20 20 20 70  |       OPT     p|
00000070  61 73 73 25 0d 00 5a 3d  20 20 20 20 20 20 20 20  |ass%..Z=        |
00000080  41 44 44 53 20 20 20 20  61 2c 62 2c 62 20 20 20  |ADDS    a,b,b   |
00000090  20 20 20 20 20 20 20 20  3b 72 65 6d 6f 76 65 20  |        ;remove |
000000a0  69 66 66 20 62 20 61 6c  77 61 79 73 20 2b 27 76  |iff b always +'v|
000000b0  65 0d 00 64 3d 20 20 20  20 20 20 20 20 52 53 42  |e..d=        RSB|
000000c0  43 53 20 20 20 62 2c 62  2c 23 30 20 20 20 20 20  |CS   b,b,#0     |
000000d0  20 20 20 20 20 3b 72 65  6d 6f 76 65 20 69 66 66  |     ;remove iff|
000000e0  20 62 20 61 6c 77 61 79  73 20 2b 27 76 65 0d 00  | b always +'ve..|
000000f0  6e 3d 20 20 20 20 20 20  20 20 41 44 43 20 20 20  |n=        ADC   |
00000100  20 20 64 2c 64 2c 64 20  20 20 20 20 20 20 20 20  |  d,d,d         |
00000110  20 20 3b 72 65 6d 6f 76  65 20 69 66 66 20 62 20  |  ;remove iff b |
00000120  61 6c 77 61 79 73 20 2b  27 76 65 0d 00 78 20 20  |always +'ve..x  |
00000130  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 61  |       ADD     a|
00000140  2c 62 2c 62 2c 4c 53 52  20 23 32 0d 00 82 20 20  |,b,b,LSR #2...  |
00000150  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 61  |       ADD     a|
00000160  2c 61 2c 61 2c 4c 53 52  20 23 33 0d 00 8c 20 20  |,a,a,LSR #3...  |
00000170  20 20 20 20 20 20 20 53  55 42 20 20 20 20 20 61  |       SUB     a|
00000180  2c 61 2c 62 2c 4c 53 52  20 23 36 0d 00 96 21 20  |,a,b,LSR #6...! |
00000190  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 61  |       ADD     a|
000001a0  2c 61 2c 61 2c 4c 53 52  20 23 31 31 0d 00 a0 21  |,a,a,LSR #11...!|
000001b0  20 20 20 20 20 20 20 20  41 44 44 20 20 20 20 20  |        ADD     |
000001c0  61 2c 61 2c 61 2c 4c 53  52 20 23 32 32 0d 00 aa  |a,a,a,LSR #22...|
000001d0  1e 20 20 20 20 20 20 20  20 4d 4f 56 20 20 20 20  |.        MOV    |
000001e0  20 61 2c 61 2c 4c 53 52  20 23 35 0d 00 b4 20 20  | a,a,LSR #5...  |
000001f0  20 20 20 20 20 20 20 41  44 44 20 20 20 20 20 63  |       ADD     c|
00000200  2c 61 2c 61 2c 41 53 4c  20 23 31 0d 00 be 20 20  |,a,a,ASL #1...  |
00000210  20 20 20 20 20 20 20 52  53 42 20 20 20 20 20 63  |       RSB     c|
00000220  2c 61 2c 63 2c 41 53 4c  20 23 33 0d 00 c8 19 20  |,a,c,ASL #3.... |
00000230  20 20 20 20 20 20 20 53  55 42 20 20 20 20 20 63  |       SUB     c|
00000240  2c 62 2c 63 0d 00 d2 19  20 20 20 20 20 20 20 20  |,b,c....        |
00000250  43 4d 50 20 20 20 20 20  63 2c 23 32 33 0d 00 dc  |CMP     c,#23...|
00000260  42 20 20 20 20 20 20 20  20 41 44 44 47 45 20 20  |B        ADDGE  |
00000270  20 61 2c 61 2c 23 31 20  20 20 20 20 20 20 20 20  | a,a,#1         |
00000280  20 3b 72 65 6d 6f 76 65  20 69 66 20 64 6f 6e 27  | ;remove if don'|
00000290  74 20 6e 65 65 64 20 71  75 6f 74 69 65 6e 74 0d  |t need quotient.|
000002a0  00 e6 43 20 20 20 20 20  20 20 20 53 55 42 47 45  |..C        SUBGE|
000002b0  20 20 20 63 2c 63 2c 23  32 33 20 20 20 20 20 20  |   c,c,#23      |
000002c0  20 20 20 3b 72 65 6d 6f  76 65 20 69 66 20 64 6f  |   ;remove if do|
000002d0  6e 27 74 20 6e 65 65 64  20 72 65 6d 61 69 6e 64  |n't need remaind|
000002e0  65 72 0d 00 f0 3d 20 20  20 20 20 20 20 20 4d 4f  |er...=        MO|
000002f0  56 53 20 20 20 20 64 2c  64 2c 41 53 52 20 23 31  |VS    d,d,ASR #1|
00000300  20 20 20 20 20 20 3b 72  65 6d 6f 76 65 20 69 66  |      ;remove if|
00000310  66 20 62 20 61 6c 77 61  79 73 20 2b 27 76 65 0d  |f b always +'ve.|
00000320  00 fa 54 20 20 20 20 20  20 20 20 52 53 42 43 53  |..T        RSBCS|
00000330  20 20 20 61 2c 61 2c 23  30 20 20 20 20 20 20 20  |   a,a,#0       |
00000340  20 20 20 3b 72 65 6d 6f  76 65 20 69 66 66 20 62  |   ;remove iff b|
00000350  20 61 6c 77 61 79 73 20  2b 27 76 65 20 6f 72 20  | always +'ve or |
00000360  64 6f 6e 27 74 20 6e 65  65 64 20 71 75 6f 74 69  |don't need quoti|
00000370  65 6e 74 0d 01 04 55 20  20 20 20 20 20 20 20 52  |ent...U        R|
00000380  53 42 43 53 20 20 20 63  2c 63 2c 23 30 20 20 20  |SBCS   c,c,#0   |
00000390  20 20 20 20 20 20 20 3b  72 65 6d 6f 76 65 20 69  |       ;remove i|
000003a0  66 66 20 62 20 61 6c 77  61 79 73 20 2b 27 76 65  |ff b always +'ve|
000003b0  20 6f 72 20 64 6f 6e 27  74 20 6e 65 65 64 20 72  | or don't need r|
000003c0  65 6d 61 69 6e 64 65 72  0d 01 0e 61 20 20 20 20  |emainder...a    |
000003d0  20 20 20 20 52 53 42 43  53 20 20 20 62 2c 62 2c  |    RSBCS   b,b,|
000003e0  23 30 20 20 20 20 20 20  20 20 20 20 3b 72 65 6d  |#0          ;rem|
000003f0  6f 76 65 20 69 66 66 20  64 6f 6e 27 74 20 6e 65  |ove iff don't ne|
00000400  65 64 20 74 6f 20 70 72  65 73 65 72 76 65 20 73  |ed to preserve s|
00000410  69 67 6e 20 6f 66 20 62  20 6f 72 20 62 20 61 6c  |ign of b or b al|
00000420  77 61 79 73 20 2b 27 76  65 0d 01 18 19 20 20 20  |ways +'ve....   |
00000430  20 20 20 20 20 53 54 52  20 20 20 20 20 63 2c 20  |     STR     c, |
00000440  6d 25 0d 01 22 1a 20 20  20 20 20 20 20 20 4d 4f  |m%..".        MO|
00000450  56 20 20 20 20 20 70 63  2c 52 31 34 0d 01 2c 15  |V     pc,R14..,.|
00000460  2e 6d 25 20 20 20 20 20  45 51 55 44 20 20 20 20  |.m%     EQUD    |
00000470  30 0d 01 36 05 5d 0d 01  40 05 ed 0d 01 4a 08 42  |0..6.]..@....J.B|
00000480  25 3d 30 0d 01 54 05 f5  0d 01 5e 0c 20 20 42 25  |%=0..T....^.  B%|
00000490  3d 2d 42 25 0d 01 68 0f  20 20 43 25 3d ba 28 6d  |=-B%..h.  C%=.(m|
000004a0  6f 64 29 0d 01 72 18 20  20 44 25 3d 42 25 81 32  |od)..r.  D%=B%.2|
000004b0  33 3a 20 45 25 3d 42 25  83 32 33 0d 01 7c 62 20  |3: E%=B%.23..|b |
000004c0  20 e7 20 43 25 3c 3e 44  25 20 84 20 21 6d 25 3c  | . C%<>D% . !m%<|
000004d0  3e 45 25 20 f1 22 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |>E% ."**********|
000004e0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00000510  2a 2a 2a 2a 2a 2a 2a 2a  22 3a ef 20 37 0d 01 86  |********":. 7...|
00000520  1d 20 20 f1 20 42 25 2c  43 25 2c 21 6d 25 3b 22  |.  . B%,C%,!m%;"|
00000530  20 20 22 2c 20 44 25 2c  45 25 0d 01 90 62 20 20  |  ", D%,E%...b  |
00000540  e7 20 43 25 3c 3e 44 25  20 84 20 21 6d 25 3c 3e  |. C%<>D% . !m%<>|
00000550  45 25 20 f1 22 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |E% ."***********|
00000560  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00000590  2a 2a 2a 2a 2a 2a 2a 22  3a ef 20 37 0d 01 9a 0c  |*******":. 7....|
000005a0  20 20 42 25 3d 2d 42 25  0d 01 a4 0f 20 20 43 25  |  B%=-B%....  C%|
000005b0  3d ba 28 6d 6f 64 29 0d  01 ae 18 20 20 44 25 3d  |=.(mod)....  D%=|
000005c0  42 25 81 32 33 3a 20 45  25 3d 42 25 83 32 33 0d  |B%.23: E%=B%.23.|
000005d0  01 b8 62 20 20 e7 20 43  25 3c 3e 44 25 20 84 20  |..b  . C%<>D% . |
000005e0  21 6d 25 3c 3e 45 25 20  f1 22 2a 2a 2a 2a 2a 2a  |!m%<>E% ."******|
000005f0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00000620  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 22 3a ef 20  |************":. |
00000630  37 0d 01 c2 1d 20 20 f1  20 42 25 2c 43 25 2c 21  |7....  . B%,C%,!|
00000640  6d 25 3b 22 20 20 22 2c  20 44 25 2c 45 25 0d 01  |m%;"  ", D%,E%..|
00000650  cc 62 20 20 e7 20 43 25  3c 3e 44 25 20 84 20 21  |.b  . C%<>D% . !|
00000660  6d 25 3c 3e 45 25 20 f1  22 2a 2a 2a 2a 2a 2a 2a  |m%<>E% ."*******|
00000670  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
000006a0  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 22 3a ef 20 37  |***********":. 7|
000006b0  0d 01 d6 0b 20 20 42 25  2b 3d 31 0d 01 e0 07 fd  |....  B%+=1.....|
000006c0  20 a3 0d 01 ea 05 e0 0d  ff                       | ........|
000006c9