Home » Archimedes archive » Acorn User » AU 1993-06.adf » !ArmCode_ArmCode » Arm2
Arm2
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 User » AU 1993-06.adf » !ArmCode_ArmCode |
Filename: | Arm2 |
Read OK: | ✔ |
File size: | 0711 bytes |
Load address: | 0000 |
Exec address: | 0000 |
File contents
10REM >Arm2 20REM Divide routine 30REM By Dave Lawrence 40REM For 32-bit machines 50REM (c) BAU June 1993 60: 70DIM code 1000 80top=0 90bot=1 100result=2 110sign=3 120bit=4 130sp=13 140link=14 150pc=15 160FOR pass=0 TO 2 STEP 2:P%=code 170[OPT pass 180.divide 190 STMFD (sp)!,{result,sign,bit} 200 MOV result,#0 210 MOV bit,#1 220 EOR sign,top,bot 230 CMP bot,#0 240 RSBMI bot,bot,#0 250 CMP top,#0 260 RSBMI top,top,#0 270 CMP top,#2^24 280 BLT skip1 290 FNdiv(31) 300 FNdiv(30) 310 FNdiv(29) 320 FNdiv(28) 330 FNdiv(27) 340 FNdiv(26) 350 FNdiv(25) 360.skip1 370 CMP top,#2^16 380 BLT skip2 390 FNdiv(24) 400 FNdiv(23) 410 FNdiv(22) 420 FNdiv(21) 430 FNdiv(20) 440 FNdiv(19) 450 FNdiv(18) 460 FNdiv(17) 470.skip2 480 CMP top,#2^8 490 BLT skip3 500 FNdiv(16) 510 FNdiv(15) 520 FNdiv(14) 530 FNdiv(13) 540 FNdiv(12) 550 FNdiv(11) 560 FNdiv(10) 570 FNdiv(9) 580 FNdiv(8) 590.skip3 600 FNdiv(7) 610 FNdiv(6) 620 FNdiv(5) 630 FNdiv(4) 640 FNdiv(3) 650 FNdiv(2) 660 FNdiv(1) 670 FNdiv(0) 680.donediv 690 MOV top,result 700 CMP sign,#0 710 RSBMI top,top,#0 720 LDMFD (sp)!,{result,sign,bit} 730 740 MOV pc,link 750]NEXT 760REPEAT 770 INPUT "Two numbers "A%,B% 780 PRINT USR(code),A% DIV B% 790UNTIL FALSE 800: 810DEF FNdiv(it) 820IF it>0 THEN 830[OPT pass 840CMP bot,top,LSR #it 850ORRLE result,result,bit,ASL #it 860SUBLE top,top,bot,ASL #it 870] 880ELSE 890[OPT pass 900CMP bot,top 910ORRLE result,result,#1 920SUBLE top,top,bot 930] 940ENDIF 950=""
� >Arm2 � Divide routine � By Dave Lawrence (� For 32-bit machines 2� (c) BAU June 1993 <: F� code 1000 P top=0 Z bot=1 dresult=2 n sign=3 x bit=4 � sp=13 �link=14 � pc=15 �� pass=0 � 2 � 2:P%=code � [OPT pass �.divide �+ STMFD (sp)!,{result,sign,bit} � MOV result,#0 � MOV bit,#1 � � sign,top,bot � CMP bot,#0 � RSBMI bot,bot,#0 � CMP top,#0 RSBMI top,top,#0 CMP top,#2^24 BLT skip1 " �div(31) , �div(30) 6 �div(29) @ �div(28) J �div(27) T �div(26) ^ �div(25) h .skip1 r CMP top,#2^16 | BLT skip2 � �div(24) � �div(23) � �div(22) � �div(21) � �div(20) � �div(19) � �div(18) � �div(17) � .skip2 � CMP top,#2^8 � BLT skip3 � �div(16) � �div(15) �div(14) �div(13) �div(12) & �div(11) 0 �div(10) : �div(9) D �div(8) N .skip3 X �div(7) b �div(6) l �div(5) v �div(4) � �div(3) � �div(2) � �div(1) � �div(0) �.donediv � MOV top,result � CMP sign,#0 � RSBMI top,top,#0 �+ LDMFD (sp)!,{result,sign,bit} � � MOV pc,link �]� �� � "Two numbers "A%,B% � �(code),A% � B% � � : *� �div(it) 4� it>0 � > [OPT pass HCMP bot,top,LSR #it R$�RLE result,result,bit,ASL #it \SUBLE top,top,bot,ASL #it f] p� z [OPT pass �CMP bot,top ��RLE result,result,#1 �SUBLE top,top,bot �] �� �="" �
00000000 0d 00 0a 0f f4 20 20 20 20 20 3e 41 72 6d 32 0d |..... >Arm2.| 00000010 00 14 18 f4 20 20 20 20 20 44 69 76 69 64 65 20 |.... Divide | 00000020 72 6f 75 74 69 6e 65 0d 00 1e 17 f4 20 42 79 20 |routine..... By | 00000030 20 44 61 76 65 20 4c 61 77 72 65 6e 63 65 0d 00 | Dave Lawrence..| 00000040 28 19 f4 20 46 6f 72 20 33 32 2d 62 69 74 20 6d |(.. For 32-bit m| 00000050 61 63 68 69 6e 65 73 0d 00 32 17 f4 20 28 63 29 |achines..2.. (c)| 00000060 20 42 41 55 20 4a 75 6e 65 20 31 39 39 33 0d 00 | BAU June 1993..| 00000070 3c 05 3a 0d 00 46 0f de 20 63 6f 64 65 20 31 30 |<.:..F.. code 10| 00000080 30 30 0d 00 50 09 74 6f 70 3d 30 0d 00 5a 09 62 |00..P.top=0..Z.b| 00000090 6f 74 3d 31 0d 00 64 0c 72 65 73 75 6c 74 3d 32 |ot=1..d.result=2| 000000a0 0d 00 6e 0a 73 69 67 6e 3d 33 0d 00 78 09 62 69 |..n.sign=3..x.bi| 000000b0 74 3d 34 0d 00 82 09 73 70 3d 31 33 0d 00 8c 0b |t=4....sp=13....| 000000c0 6c 69 6e 6b 3d 31 34 0d 00 96 09 70 63 3d 31 35 |link=14....pc=15| 000000d0 0d 00 a0 1c e3 20 70 61 73 73 3d 30 20 b8 20 32 |..... pass=0 . 2| 000000e0 20 88 20 32 3a 50 25 3d 63 6f 64 65 0d 00 aa 0d | . 2:P%=code....| 000000f0 5b 4f 50 54 20 70 61 73 73 0d 00 b4 0b 2e 64 69 |[OPT pass.....di| 00000100 76 69 64 65 0d 00 be 2b 20 20 20 20 20 20 20 20 |vide...+ | 00000110 53 54 4d 46 44 20 20 20 28 73 70 29 21 2c 7b 72 |STMFD (sp)!,{r| 00000120 65 73 75 6c 74 2c 73 69 67 6e 2c 62 69 74 7d 0d |esult,sign,bit}.| 00000130 00 c8 1d 20 20 20 20 20 20 20 20 4d 4f 56 20 20 |... MOV | 00000140 20 20 20 72 65 73 75 6c 74 2c 23 30 0d 00 d2 1a | result,#0....| 00000150 20 20 20 20 20 20 20 20 4d 4f 56 20 20 20 20 20 | MOV | 00000160 62 69 74 2c 23 31 0d 00 dc 1e 20 20 20 20 20 20 |bit,#1.... | 00000170 20 20 82 20 20 20 20 20 73 69 67 6e 2c 74 6f 70 | . sign,top| 00000180 2c 62 6f 74 0d 00 e6 1a 20 20 20 20 20 20 20 20 |,bot.... | 00000190 43 4d 50 20 20 20 20 20 62 6f 74 2c 23 30 0d 00 |CMP bot,#0..| 000001a0 f0 1e 20 20 20 20 20 20 20 20 52 53 42 4d 49 20 |.. RSBMI | 000001b0 20 20 62 6f 74 2c 62 6f 74 2c 23 30 0d 00 fa 1a | bot,bot,#0....| 000001c0 20 20 20 20 20 20 20 20 43 4d 50 20 20 20 20 20 | CMP | 000001d0 74 6f 70 2c 23 30 0d 01 04 1e 20 20 20 20 20 20 |top,#0.... | 000001e0 20 20 52 53 42 4d 49 20 20 20 74 6f 70 2c 74 6f | RSBMI top,to| 000001f0 70 2c 23 30 0d 01 0e 1d 20 20 20 20 20 20 20 20 |p,#0.... | 00000200 43 4d 50 20 20 20 20 20 74 6f 70 2c 23 32 5e 32 |CMP top,#2^2| 00000210 34 0d 01 18 19 20 20 20 20 20 20 20 20 42 4c 54 |4.... BLT| 00000220 20 20 20 20 20 73 6b 69 70 31 0d 01 22 14 20 20 | skip1..". | 00000230 20 20 20 20 20 20 a4 64 69 76 28 33 31 29 0d 01 | .div(31)..| 00000240 2c 14 20 20 20 20 20 20 20 20 a4 64 69 76 28 33 |,. .div(3| 00000250 30 29 0d 01 36 14 20 20 20 20 20 20 20 20 a4 64 |0)..6. .d| 00000260 69 76 28 32 39 29 0d 01 40 14 20 20 20 20 20 20 |iv(29)..@. | 00000270 20 20 a4 64 69 76 28 32 38 29 0d 01 4a 14 20 20 | .div(28)..J. | 00000280 20 20 20 20 20 20 a4 64 69 76 28 32 37 29 0d 01 | .div(27)..| 00000290 54 14 20 20 20 20 20 20 20 20 a4 64 69 76 28 32 |T. .div(2| 000002a0 36 29 0d 01 5e 14 20 20 20 20 20 20 20 20 a4 64 |6)..^. .d| 000002b0 69 76 28 32 35 29 0d 01 68 0a 2e 73 6b 69 70 31 |iv(25)..h..skip1| 000002c0 0d 01 72 1d 20 20 20 20 20 20 20 20 43 4d 50 20 |..r. CMP | 000002d0 20 20 20 20 74 6f 70 2c 23 32 5e 31 36 0d 01 7c | top,#2^16..|| 000002e0 19 20 20 20 20 20 20 20 20 42 4c 54 20 20 20 20 |. BLT | 000002f0 20 73 6b 69 70 32 0d 01 86 14 20 20 20 20 20 20 | skip2.... | 00000300 20 20 a4 64 69 76 28 32 34 29 0d 01 90 14 20 20 | .div(24).... | 00000310 20 20 20 20 20 20 a4 64 69 76 28 32 33 29 0d 01 | .div(23)..| 00000320 9a 14 20 20 20 20 20 20 20 20 a4 64 69 76 28 32 |.. .div(2| 00000330 32 29 0d 01 a4 14 20 20 20 20 20 20 20 20 a4 64 |2).... .d| 00000340 69 76 28 32 31 29 0d 01 ae 14 20 20 20 20 20 20 |iv(21).... | 00000350 20 20 a4 64 69 76 28 32 30 29 0d 01 b8 14 20 20 | .div(20).... | 00000360 20 20 20 20 20 20 a4 64 69 76 28 31 39 29 0d 01 | .div(19)..| 00000370 c2 14 20 20 20 20 20 20 20 20 a4 64 69 76 28 31 |.. .div(1| 00000380 38 29 0d 01 cc 14 20 20 20 20 20 20 20 20 a4 64 |8).... .d| 00000390 69 76 28 31 37 29 0d 01 d6 0a 2e 73 6b 69 70 32 |iv(17).....skip2| 000003a0 0d 01 e0 1c 20 20 20 20 20 20 20 20 43 4d 50 20 |.... CMP | 000003b0 20 20 20 20 74 6f 70 2c 23 32 5e 38 0d 01 ea 19 | top,#2^8....| 000003c0 20 20 20 20 20 20 20 20 42 4c 54 20 20 20 20 20 | BLT | 000003d0 73 6b 69 70 33 0d 01 f4 14 20 20 20 20 20 20 20 |skip3.... | 000003e0 20 a4 64 69 76 28 31 36 29 0d 01 fe 14 20 20 20 | .div(16).... | 000003f0 20 20 20 20 20 a4 64 69 76 28 31 35 29 0d 02 08 | .div(15)...| 00000400 14 20 20 20 20 20 20 20 20 a4 64 69 76 28 31 34 |. .div(14| 00000410 29 0d 02 12 14 20 20 20 20 20 20 20 20 a4 64 69 |).... .di| 00000420 76 28 31 33 29 0d 02 1c 14 20 20 20 20 20 20 20 |v(13).... | 00000430 20 a4 64 69 76 28 31 32 29 0d 02 26 14 20 20 20 | .div(12)..&. | 00000440 20 20 20 20 20 a4 64 69 76 28 31 31 29 0d 02 30 | .div(11)..0| 00000450 14 20 20 20 20 20 20 20 20 a4 64 69 76 28 31 30 |. .div(10| 00000460 29 0d 02 3a 13 20 20 20 20 20 20 20 20 a4 64 69 |)..:. .di| 00000470 76 28 39 29 0d 02 44 13 20 20 20 20 20 20 20 20 |v(9)..D. | 00000480 a4 64 69 76 28 38 29 0d 02 4e 0a 2e 73 6b 69 70 |.div(8)..N..skip| 00000490 33 0d 02 58 13 20 20 20 20 20 20 20 20 a4 64 69 |3..X. .di| 000004a0 76 28 37 29 0d 02 62 13 20 20 20 20 20 20 20 20 |v(7)..b. | 000004b0 a4 64 69 76 28 36 29 0d 02 6c 13 20 20 20 20 20 |.div(6)..l. | 000004c0 20 20 20 a4 64 69 76 28 35 29 0d 02 76 13 20 20 | .div(5)..v. | 000004d0 20 20 20 20 20 20 a4 64 69 76 28 34 29 0d 02 80 | .div(4)...| 000004e0 13 20 20 20 20 20 20 20 20 a4 64 69 76 28 33 29 |. .div(3)| 000004f0 0d 02 8a 13 20 20 20 20 20 20 20 20 a4 64 69 76 |.... .div| 00000500 28 32 29 0d 02 94 13 20 20 20 20 20 20 20 20 a4 |(2).... .| 00000510 64 69 76 28 31 29 0d 02 9e 13 20 20 20 20 20 20 |div(1).... | 00000520 20 20 a4 64 69 76 28 30 29 0d 02 a8 0c 2e 64 6f | .div(0).....do| 00000530 6e 65 64 69 76 0d 02 b2 1e 20 20 20 20 20 20 20 |nediv.... | 00000540 20 4d 4f 56 20 20 20 20 20 74 6f 70 2c 72 65 73 | MOV top,res| 00000550 75 6c 74 0d 02 bc 1b 20 20 20 20 20 20 20 20 43 |ult.... C| 00000560 4d 50 20 20 20 20 20 73 69 67 6e 2c 23 30 0d 02 |MP sign,#0..| 00000570 c6 1e 20 20 20 20 20 20 20 20 52 53 42 4d 49 20 |.. RSBMI | 00000580 20 20 74 6f 70 2c 74 6f 70 2c 23 30 0d 02 d0 2b | top,top,#0...+| 00000590 20 20 20 20 20 20 20 20 4c 44 4d 46 44 20 20 20 | LDMFD | 000005a0 28 73 70 29 21 2c 7b 72 65 73 75 6c 74 2c 73 69 |(sp)!,{result,si| 000005b0 67 6e 2c 62 69 74 7d 0d 02 da 04 0d 02 e4 1b 20 |gn,bit}........ | 000005c0 20 20 20 20 20 20 20 4d 4f 56 20 20 20 20 20 70 | MOV p| 000005d0 63 2c 6c 69 6e 6b 0d 02 ee 06 5d ed 0d 02 f8 05 |c,link....].....| 000005e0 f5 0d 03 02 1a 20 e8 20 22 54 77 6f 20 6e 75 6d |..... . "Two num| 000005f0 62 65 72 73 20 22 41 25 2c 42 25 0d 03 0c 16 20 |bers "A%,B%.... | 00000600 f1 20 ba 28 63 6f 64 65 29 2c 41 25 20 81 20 42 |. .(code),A% . B| 00000610 25 0d 03 16 07 fd 20 a3 0d 03 20 05 3a 0d 03 2a |%..... ... .:..*| 00000620 0e dd 20 a4 64 69 76 28 69 74 29 0d 03 34 0c e7 |.. .div(it)..4..| 00000630 20 69 74 3e 30 20 8c 0d 03 3e 0d 5b 4f 50 54 20 | it>0 ...>.[OPT | 00000640 70 61 73 73 0d 03 48 1b 43 4d 50 20 20 20 20 20 |pass..H.CMP | 00000650 62 6f 74 2c 74 6f 70 2c 4c 53 52 20 23 69 74 0d |bot,top,LSR #it.| 00000660 03 52 24 84 52 4c 45 20 20 20 72 65 73 75 6c 74 |.R$.RLE result| 00000670 2c 72 65 73 75 6c 74 2c 62 69 74 2c 41 53 4c 20 |,result,bit,ASL | 00000680 23 69 74 0d 03 5c 1f 53 55 42 4c 45 20 20 20 74 |#it..\.SUBLE t| 00000690 6f 70 2c 74 6f 70 2c 62 6f 74 2c 41 53 4c 20 23 |op,top,bot,ASL #| 000006a0 69 74 0d 03 66 05 5d 0d 03 70 05 cc 0d 03 7a 0d |it..f.]..p....z.| 000006b0 5b 4f 50 54 20 70 61 73 73 0d 03 84 13 43 4d 50 |[OPT pass....CMP| 000006c0 20 20 20 20 20 62 6f 74 2c 74 6f 70 0d 03 8e 1b | bot,top....| 000006d0 84 52 4c 45 20 20 20 72 65 73 75 6c 74 2c 72 65 |.RLE result,re| 000006e0 73 75 6c 74 2c 23 31 0d 03 98 17 53 55 42 4c 45 |sult,#1....SUBLE| 000006f0 20 20 20 74 6f 70 2c 74 6f 70 2c 62 6f 74 0d 03 | top,top,bot..| 00000700 a2 05 5d 0d 03 ac 05 cd 0d 03 b6 07 3d 22 22 0d |..].........="".| 00000710 ff |.| 00000711