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