Home » Archimedes archive » Acorn User » AU 1995-11.adf » !Regulars » Regulars/StarInfo/Radford/number_e/fctrial

Regulars/StarInfo/Radford/number_e/fctrial

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 1995-11.adf » !Regulars
Filename: Regulars/StarInfo/Radford/number_e/fctrial
Read OK:
File size: 1554 bytes
Load address: 0000
Exec address: 0000
File contents
   10ON ERROR REPORT:PRINT;ERL:END
   20DIM code% 400000
   30carry=8
   40aba=13
   50INPUT "PLEASE ENTER THE NUMBER",it%
   60
   70accuracy%=1<<(aba)
   80accuracy2%=1<<(aba-1)
   90acc2%=100
  100FOR pass%=0 TO 2 STEP 2
  110P%=code%
  120[
  130OPT pass%
  140
  150.SVIT
  160EQUD 0
  170
  180.Factoriallify
  190STMFD R13!,{R14}
  200:
  210BL get_addresses
  220BL fill_e
  230MOV R3,#0             \factorial
  240.main_for_loopifys1
  250
  260  MOV R14,#0
  270  STRB R14,[R0]
  280  STRB R14,[R1]
  290  CMP R3,#1
  300  MOVLE  R14,#1
  310  STRLEB R14,[R0,#1]
  320  STRLEB R14,[R1,#1]
  330  MOVLE  R14,#10
  340  STRLEB R14,[R0,#2]
  350  STRLEB R14,[R1,#2]
  360  CMP R3,#1
  370  ADRGT R4,adollar
  380  MOVGT R0,R4
  390  BLGT numbertosamstringfactorial
  400  BL begin_multiplication
  410  \RESULT IS RETURNED IN answer
  420  \copy to adollar
  430  MOV R5,#0
  440  ADR R7,adollar
  450  MOV R14,#0
  460  STRB R14,[R7],#1
  470  BL address_ans
  480  .main_for_loopifys2
  490    LDRB R6,[R8,R5]
  500    STRB R6,[R7,R5]
  510    CMP R6,#10
  520    ADD R5,R5,#1
  530  BNE main_for_loopifys2
  540
  550  BL get_addresses
  560  MOV R14,#0
  570  STRB R14,[R0]
  580  MOV R14,#1
  590  STRB R14,[R0,#1]
  600  MOV R14,#0
  610  MOV R5,#2
  620  .main_for_loopifysc1
  630    STRB R14,[R0,R5]
  640    ADD R5,R5,#1
  650    CMP R5,#acc2%
  660  BNE main_for_loopifysc1
  670  MOV R14,#10
  680  STRB R14,[R0,R5]
  690
  700  SWI "OS_ReadEscapeState"
  710  LDMCSFD R13!,{PC}
  720
  730  ADD R3,R3,#1
  740  STMFD R13!,{R0}:LDR R0,SVIT:CMP R3,R0:LDMFD R13!,{R0}
  750BLE main_for_loopifys1
  760
  770LDMFD R13!,{PC}
  780
  790.buffer2
  800FNBytes(32)
  810
  820.adollar
  830FNBytes(accuracy%)
  840:
  850:
  860.numbertosamstringfactorial
  870STMFD R13!,{R14}
  880STMFD R13!,{R0-R9}
  890:
  900MOV R9,R1
  910
  920MOV R0,R3
  930ADR R1,buffer
  940MOV R2,#32
  950SWI "OS_ConvertCardinal4"
  960MOV R6,#1
  970.ntsfor_loopify1
  980  LDRB R5,[R0],#1
  990  SUB R5,R5,#ASC("0")
 1000  STRB R5,[R9,R6]
 1010  ADD R6,R6,#1
 1020  CMP R0,R1
 1030BLE ntsfor_loopify1
 1040MOV R14,#10
 1050SUB R6,R6,#1
 1060STRB R14,[R9,R6]
 1070:
 1080LDMFD R13!,{R0-R9}
 1090LDMFD R13!,{PC}
 1100.buffer
 1110FNBytes(32)
 1120:
 1130:
 1140.divres
 1150EQUD 0
 1160.modres
 1170EQUD 0
 1180
 1190.begin_multiplication
 1200STMFD R13!,{R14}
 1210STMFD R13!,{R0-R12}
 1220
 1230
 1240\find end of operand1 AND operand2
 1250
 1260MOV R3,R0
 1270MOV R5,#0
 1280.loop_get_end1B
 1290  LDRB R4,[R3],#1
 1300  ADD R5,R5,#1
 1310  CMP R4,#10
 1320BNE loop_get_end1B
 1330
 1340MOV R3,R1
 1350MOV R6,#0
 1360.loop_get_end2B
 1370  LDRB R4,[R3],#1
 1380  ADD R6,R6,#1
 1390  CMP R4,#10
 1400BNE loop_get_end2B
 1410
 1420\LENGTH OF OPERAND 1 IS RETURNED IN R5, LENGTH OF OPERAND 2 IS IN R6
 1430
 1440ADD R7,R5,R6             \CONTAINS TOTAL LENGTHS
 1450
 1460\REGISTERS AVAILABLE = R3,R4,R8-R12,R14
 1470
 1480\structure For..next loop-
 1490
 1500MOV R3,#0
 1510MOV R4,R2
 1520SUB R14,R7,#1 \LOOP COUNTER
 1530.for_loopify1
 1540  STRB R3,[R4],#1
 1550  SUBS R14,R14,#1
 1560BNE for_loopify1
 1570MOV R3,#10
 1580SUB R4,R4,#1
 1590STRB R3,[R4]
 1600ADD R4,R4,#1
 1610
 1620SUB R11,R6,#2   \LOOP COUNTER (J%)
 1630.for_loopify2
 1640  MOV carry,#0
 1650  LDRB R3,[R1,R11]  \G%=B%?J%
 1660  ADD R4,R2,R11
 1670  ADD R4,R4,#1  \V%=D%+J%+1
 1680  SUB R10,R5,#2 \LOOP COUNTER (L%)
 1690  .for_loopify3
 1700    LDRB R9,[R0,R10] \H%=A%?L%
 1710    MUL R14,R3,R9
 1720    ADD R14,R14,carry
 1730    STMFD R13!,{R8}
 1740    LDRB R8,[R4,R10]
 1750    ADD R14,R14,R8
 1760
 1770    \ASSEMBLE MOD AND DIV FUNCTION
 1780    STMFD R13!,{R0-R6}
 1790    MOV R0,R14
 1800    MOV R1,#10
 1810    ANDS R6,R0,#1<<31
 1820    RSBMI R0,R0,#0
 1830    EOR R5,R6,R1
 1840    CMP R1,#0
 1850    RSBMI R1,R1,#0
 1860
 1870    MOV R2,#0
 1880    MOV R3,#0
 1890    MOV R4,#1<<31
 1900
 1910    .division_loop
 1920    MOVS R0,R0,ASL#1
 1930    ADC R2,R2,R2
 1940    CMP R2,R1
 1950    SUBGE R2,R2,R1
 1960    ORRGE R3,R3,R4
 1970    MOVS R4,R4,LSR#1
 1980    BNE division_loop
 1990
 2000    CMP R5,#0
 2010    RSBMI R3,R3,#0
 2020    CMP R6,#0
 2030    RSBMI R2,R2,#0
 2040
 2050    STR R3,divres2
 2060    STR R2,modres2
 2070
 2080    LDMFD R13!,{R0-R6}
 2090
 2100    LDR R8,modres2
 2110    STRB R8,[R4,R10]     \FORMERLY R8
 2120    LDMFD R13!,{R8}
 2130    LDR R8,divres2
 2140    SUBS R10,R10,#1
 2150  BNE for_loopify3
 2160  STRB R8,[R4,R10]
 2170  SUBS R11,R11,#1
 2180BNE for_loopify2
 2190
 2200BL Remove_Leading0s
 2210
 2220LDMFD R13!,{R0-R12}
 2230LDMFD R13!,{PC}
 2240
 2250.divres2
 2260EQUD 0
 2270.modres2
 2280
 2290.divres3
 2300EQUD 0
 2310.modres3
 2320EQUD 0
 2330
 2340
 2350.Remove_Leading0s
 2360STMFD R13!,{R14}
 2370:
 2380MOV R4,#0
 2390.loop_remove0s
 2400LDRB R5,[R2,R4]
 2410CMP R5,#0
 2420ADDEQ R4,R4,#1
 2430BEQ loop_remove0s
 2440
 2450ADR R6,answer
 2460MOV R7,#0
 2470.loop_swap_string
 2480LDRB R5,[R2,R4]
 2490STRB R5,[R6,R7]
 2500ADD R4,R4,#1
 2510ADD R7,R7,#1
 2520CMP R5,#10
 2530BNE loop_swap_string
 2540
 2550
 2560:
 2570LDMFD R13!,{PC}
 2580
 2590.address_ans
 2600STMFD R13!,{R14}
 2610ADR R8,answer
 2620LDMFD R13!,{PC}
 2630.answer
 2640FNBytes(accuracy%)
 2650
 2660
 2670.get_addresses
 2680STMFD R13!,{R14}
 2690ADR R0,operand1
 2700B next1
 2710.operand1
 2720FNBytes(accuracy%)
 2730.next1
 2740ADR R1,operand2
 2750B next2
 2760.operand2
 2770FNBytes(accuracy%)
 2780.next2
 2790ADR R2,result
 2800B next3
 2810.result
 2820FNBytes(accuracy%)
 2830.next3
 2840ADR R12,e_so_far
 2850LDMFD R13!,{PC}
 2860.e_so_far
 2870FNBytes(accuracy%)
 2880:
 2890:
 2900.fill_e
 2910STMFD R13!,{R14}
 2920:
 2930MOV R5,#0
 2940MOV R6,#0
 2950.loop_fill_e
 2960  STRB R5,[R12,R6]
 2970  ADD R6,R6,#1
 2980  CMP R6,#accuracy2%
 2990BNE loop_fill_e
 3000MOV R5,#10
 3010SUB R6,R6,#1
 3020STRB R5,[R12,R6]
 3030:
 3040LDMFD R13!,{PC}
 3050
 3060]
 3070NEXT
 3080:
 3090SVIT!0=it%
 3100PRINT "Calculating....."
 3110CALL Factoriallify
 3120
 3130REM *SPOOL E_FILE3
 3140  PRINT
 3150  PRINT
 3160  PRINT it%;"! = ";
 3170  A=0
 3180  REPEAT
 3190    PRINT STR$(adollar?A);
 3200    A+=1
 3210  UNTIL (adollar?A)=10
 3220REM *SPOOL
 3230
 3240END
 3250:
 3260DEFFNBytes(inc%)
 3270P%+=inc%
 3280=0
 3290:

� � �:�;�:�
� code% 400000
carry=8
(
aba=13
2#� "PLEASE ENTER THE NUMBER",it%
<
Faccuracy%=1<<(aba)
Paccuracy2%=1<<(aba-1)
Z
acc2%=100
d� pass%=0 � 2 � 2
nP%=code%
x[
�
OPT pass%
�
�	.SVIT
�
EQUD 0
�
�.Factoriallify
�STMFD R13!,{R14}
�:
�BL get_addresses
�
BL fill_e
�$MOV R3,#0             \factorial
�.main_for_loopifys1
�
  MOV R14,#0
  STRB R14,[R0]
  STRB R14,[R1]
"  CMP R3,#1
,  MOVLE  R14,#1
6  STRLEB R14,[R0,#1]
@  STRLEB R14,[R1,#1]
J  MOVLE  R14,#10
T  STRLEB R14,[R0,#2]
^  STRLEB R14,[R1,#2]
h  CMP R3,#1
r  ADRGT R4,adollar
|  MOVGT R0,R4
�%  BLGT numbertosamstringfactorial
�  BL begin_multiplication
�#  \RESULT IS RETURNED IN answer
�  \copy to adollar
�  MOV R5,#0
�  ADR R7,adollar
�  MOV R14,#0
�  STRB R14,[R7],#1
�  BL address_ans
�  .main_for_loopifys2
�    LDRB R6,[R8,R5]
�    STRB R6,[R7,R5]
�    CMP R6,#10
    ADD R5,R5,#1
  BNE main_for_loopifys2

&  BL get_addresses
0  MOV R14,#0
:  STRB R14,[R0]
D  MOV R14,#1
N  STRB R14,[R0,#1]
X  MOV R14,#0
b  MOV R5,#2
l  .main_for_loopifysc1
v    STRB R14,[R0,R5]
�    ADD R5,R5,#1
�    CMP R5,#acc2%
�  BNE main_for_loopifysc1
�  MOV R14,#10
�  STRB R14,[R0,R5]
�
�  SWI "OS_ReadEscapeState"
�  LDMCSFD R13!,{PC}
�
�  ADD R3,R3,#1
�;  STMFD R13!,{R0}:LDR R0,SVIT:CMP R3,R0:LDMFD R13!,{R0}
�BLE main_for_loopifys1
�
LDMFD R13!,{PC}

.buffer2
 �Bytes(32)
*
4.adollar
>�Bytes(accuracy%)
H:
R:
\.numbertosamstringfactorial
fSTMFD R13!,{R14}
pSTMFD R13!,{R0-R9}
z:
�
MOV R9,R1
�
�
MOV R0,R3
�ADR R1,buffer
�MOV R2,#32
�SWI "OS_ConvertCardinal4"
�
MOV R6,#1
�.ntsfor_loopify1
�  LDRB R5,[R0],#1
�  SUB R5,R5,#�("0")
�  STRB R5,[R9,R6]
�  ADD R6,R6,#1
�  CMP R0,R1
BLE ntsfor_loopify1
MOV R14,#10
SUB R6,R6,#1
$STRB R14,[R9,R6]
.:
8LDMFD R13!,{R0-R9}
BLDMFD R13!,{PC}
L.buffer
V�Bytes(32)
`:
j:
t.divres
~
EQUD 0
�.modres
�
EQUD 0
�
�.begin_multiplication
�STMFD R13!,{R14}
�STMFD R13!,{R0-R12}
�
�
�$\find end of operand1 � operand2
�
�
MOV R3,R0
�
MOV R5,#0
.loop_get_end1B

  LDRB R4,[R3],#1
  ADD R5,R5,#1
  CMP R4,#10
(BNE loop_get_end1B
2
<
MOV R3,R1
F
MOV R6,#0
P.loop_get_end2B
Z  LDRB R4,[R3],#1
d  ADD R6,R6,#1
n  CMP R4,#10
xBNE loop_get_end2B
�
�B\�GTH � OPERAND 1 IS RETURNED IN R5, �GTH � OPERAND 2 IS IN R6
�
�1ADD R7,R5,R6             \CONTAINS �TAL �GTHS
�
�+\REGISTERS AVAILABLE = R3,R4,R8-R12,R14
�
�\structure For..next loop-
�
�
MOV R3,#0
�
MOV R4,R2
�SUB R14,R7,#1 \LOOP COUNTER
�.for_loopify1
  STRB R3,[R4],#1
  SUBS R14,R14,#1
BNE for_loopify1
"MOV R3,#10
,SUB R4,R4,#1
6STRB R3,[R4]
@ADD R4,R4,#1
J
T&SUB R11,R6,#2   \LOOP COUNTER (J%)
^.for_loopify2
h  MOV carry,#0
r!  LDRB R3,[R1,R11]  \G%=B%?J%
|  ADD R4,R2,R11
�  ADD R4,R4,#1  \V%=D%+J%+1
�&  SUB R10,R5,#2 \LOOP COUNTER (L%)
�  .for_loopify3
�"    LDRB R9,[R0,R10] \H%=A%?L%
�    MUL R14,R3,R9
�    ADD R14,R14,carry
�    STMFD R13!,{R8}
�    LDRB R8,[R4,R10]
�    ADD R14,R14,R8
�
�     \ASSEMBLE � � � FUNCTION
�    STMFD R13!,{R0-R6}
�    MOV R0,R14
    MOV R1,#10
    �S R6,R0,#1<<31
    RSBMI R0,R0,#0
&    � R5,R6,R1
0    CMP R1,#0
:    RSBMI R1,R1,#0
D
N    MOV R2,#0
X    MOV R3,#0
b    MOV R4,#1<<31
l
v    .division_loop
�    MOVS R0,R0,ASL#1
�    ADC R2,R2,R2
�    CMP R2,R1
�    SUBGE R2,R2,R1
�    �RGE R3,R3,R4
�    MOVS R4,R4,LSR#1
�    BNE division_loop
�
�    CMP R5,#0
�    RSBMI R3,R3,#0
�    CMP R6,#0
�    RSBMI R2,R2,#0
�
    STR R3,divres2
    STR R2,modres2

     LDMFD R13!,{R0-R6}
*
4    LDR R8,modres2
>'    STRB R8,[R4,R10]     \�MERLY R8
H    LDMFD R13!,{R8}
R    LDR R8,divres2
\    SUBS R10,R10,#1
f  BNE for_loopify3
p  STRB R8,[R4,R10]
z  SUBS R11,R11,#1
�BNE for_loopify2
�
�BL Remove_Leading0s
�
�LDMFD R13!,{R0-R12}
�LDMFD R13!,{PC}
�
�.divres2
�
EQUD 0
�.modres2
�
�.divres3
�
EQUD 0
	.modres3
	
EQUD 0
	
	$
	..Remove_Leading0s
	8STMFD R13!,{R14}
	B:
	L
MOV R4,#0
	V.loop_remove0s
	`LDRB R5,[R2,R4]
	j
CMP R5,#0
	tADDEQ R4,R4,#1
	~BEQ loop_remove0s
	�
	�ADR R6,answer
	�
MOV R7,#0
	�.loop_swap_string
	�LDRB R5,[R2,R4]
	�STRB R5,[R6,R7]
	�ADD R4,R4,#1
	�ADD R7,R7,#1
	�CMP R5,#10
	�BNE loop_swap_string
	�
	�
:

LDMFD R13!,{PC}

.address_ans
(STMFD R13!,{R14}
2ADR R8,answer
<LDMFD R13!,{PC}
F.answer
P�Bytes(accuracy%)
Z
d
n.get_addresses
xSTMFD R13!,{R14}
�ADR R0,operand1
�B next1
�
.operand1
��Bytes(accuracy%)
�
.next1
�ADR R1,operand2
�B next2
�
.operand2
��Bytes(accuracy%)
�
.next2
�ADR R2,result
�B next3
�.result
�Bytes(accuracy%)

.next3
ADR R12,e_so_far
"LDMFD R13!,{PC}
,
.e_so_far
6�Bytes(accuracy%)
@:
J:
T.fill_e
^STMFD R13!,{R14}
h:
r
MOV R5,#0
|
MOV R6,#0
�.loop_fill_e
�  STRB R5,[R12,R6]
�  ADD R6,R6,#1
�  CMP R6,#accuracy2%
�BNE loop_fill_e
�MOV R5,#10
�SUB R6,R6,#1
�STRB R5,[R12,R6]
�:
�LDMFD R13!,{PC}
�
�]
��
:
SVIT!0=it%
� "Calculating....."
&� Factoriallify
0
:� *SPOOL E_FILE3
D  �
N  �
X  � it%;"! = ";
b	  A=0
l  �
v    � �(adollar?A);
�    A+=1
�  � (adollar?A)=10
�� *SPOOL
�
��
�:
�ݤBytes(inc%)
�P%+=inc%
�=0
�:
�
00000000  0d 00 0a 0f ee 20 85 20  f6 3a f1 3b 9e 3a e0 0d  |..... . .:.;.:..|
00000010  00 14 12 de 20 63 6f 64  65 25 20 34 30 30 30 30  |.... code% 40000|
00000020  30 0d 00 1e 0b 63 61 72  72 79 3d 38 0d 00 28 0a  |0....carry=8..(.|
00000030  61 62 61 3d 31 33 0d 00  32 23 e8 20 22 50 4c 45  |aba=13..2#. "PLE|
00000040  41 53 45 20 45 4e 54 45  52 20 54 48 45 20 4e 55  |ASE ENTER THE NU|
00000050  4d 42 45 52 22 2c 69 74  25 0d 00 3c 04 0d 00 46  |MBER",it%..<...F|
00000060  16 61 63 63 75 72 61 63  79 25 3d 31 3c 3c 28 61  |.accuracy%=1<<(a|
00000070  62 61 29 0d 00 50 19 61  63 63 75 72 61 63 79 32  |ba)..P.accuracy2|
00000080  25 3d 31 3c 3c 28 61 62  61 2d 31 29 0d 00 5a 0d  |%=1<<(aba-1)..Z.|
00000090  61 63 63 32 25 3d 31 30  30 0d 00 64 15 e3 20 70  |acc2%=100..d.. p|
000000a0  61 73 73 25 3d 30 20 b8  20 32 20 88 20 32 0d 00  |ass%=0 . 2 . 2..|
000000b0  6e 0c 50 25 3d 63 6f 64  65 25 0d 00 78 05 5b 0d  |n.P%=code%..x.[.|
000000c0  00 82 0d 4f 50 54 20 70  61 73 73 25 0d 00 8c 04  |...OPT pass%....|
000000d0  0d 00 96 09 2e 53 56 49  54 0d 00 a0 0a 45 51 55  |.....SVIT....EQU|
000000e0  44 20 30 0d 00 aa 04 0d  00 b4 12 2e 46 61 63 74  |D 0.........Fact|
000000f0  6f 72 69 61 6c 6c 69 66  79 0d 00 be 14 53 54 4d  |oriallify....STM|
00000100  46 44 20 52 31 33 21 2c  7b 52 31 34 7d 0d 00 c8  |FD R13!,{R14}...|
00000110  05 3a 0d 00 d2 14 42 4c  20 67 65 74 5f 61 64 64  |.:....BL get_add|
00000120  72 65 73 73 65 73 0d 00  dc 0d 42 4c 20 66 69 6c  |resses....BL fil|
00000130  6c 5f 65 0d 00 e6 24 4d  4f 56 20 52 33 2c 23 30  |l_e...$MOV R3,#0|
00000140  20 20 20 20 20 20 20 20  20 20 20 20 20 5c 66 61  |             \fa|
00000150  63 74 6f 72 69 61 6c 0d  00 f0 17 2e 6d 61 69 6e  |ctorial.....main|
00000160  5f 66 6f 72 5f 6c 6f 6f  70 69 66 79 73 31 0d 00  |_for_loopifys1..|
00000170  fa 04 0d 01 04 10 20 20  4d 4f 56 20 52 31 34 2c  |......  MOV R14,|
00000180  23 30 0d 01 0e 13 20 20  53 54 52 42 20 52 31 34  |#0....  STRB R14|
00000190  2c 5b 52 30 5d 0d 01 18  13 20 20 53 54 52 42 20  |,[R0]....  STRB |
000001a0  52 31 34 2c 5b 52 31 5d  0d 01 22 0f 20 20 43 4d  |R14,[R1]..".  CM|
000001b0  50 20 52 33 2c 23 31 0d  01 2c 13 20 20 4d 4f 56  |P R3,#1..,.  MOV|
000001c0  4c 45 20 20 52 31 34 2c  23 31 0d 01 36 18 20 20  |LE  R14,#1..6.  |
000001d0  53 54 52 4c 45 42 20 52  31 34 2c 5b 52 30 2c 23  |STRLEB R14,[R0,#|
000001e0  31 5d 0d 01 40 18 20 20  53 54 52 4c 45 42 20 52  |1]..@.  STRLEB R|
000001f0  31 34 2c 5b 52 31 2c 23  31 5d 0d 01 4a 14 20 20  |14,[R1,#1]..J.  |
00000200  4d 4f 56 4c 45 20 20 52  31 34 2c 23 31 30 0d 01  |MOVLE  R14,#10..|
00000210  54 18 20 20 53 54 52 4c  45 42 20 52 31 34 2c 5b  |T.  STRLEB R14,[|
00000220  52 30 2c 23 32 5d 0d 01  5e 18 20 20 53 54 52 4c  |R0,#2]..^.  STRL|
00000230  45 42 20 52 31 34 2c 5b  52 31 2c 23 32 5d 0d 01  |EB R14,[R1,#2]..|
00000240  68 0f 20 20 43 4d 50 20  52 33 2c 23 31 0d 01 72  |h.  CMP R3,#1..r|
00000250  16 20 20 41 44 52 47 54  20 52 34 2c 61 64 6f 6c  |.  ADRGT R4,adol|
00000260  6c 61 72 0d 01 7c 11 20  20 4d 4f 56 47 54 20 52  |lar..|.  MOVGT R|
00000270  30 2c 52 34 0d 01 86 25  20 20 42 4c 47 54 20 6e  |0,R4...%  BLGT n|
00000280  75 6d 62 65 72 74 6f 73  61 6d 73 74 72 69 6e 67  |umbertosamstring|
00000290  66 61 63 74 6f 72 69 61  6c 0d 01 90 1d 20 20 42  |factorial....  B|
000002a0  4c 20 62 65 67 69 6e 5f  6d 75 6c 74 69 70 6c 69  |L begin_multipli|
000002b0  63 61 74 69 6f 6e 0d 01  9a 23 20 20 5c 52 45 53  |cation...#  \RES|
000002c0  55 4c 54 20 49 53 20 52  45 54 55 52 4e 45 44 20  |ULT IS RETURNED |
000002d0  49 4e 20 61 6e 73 77 65  72 0d 01 a4 16 20 20 5c  |IN answer....  \|
000002e0  63 6f 70 79 20 74 6f 20  61 64 6f 6c 6c 61 72 0d  |copy to adollar.|
000002f0  01 ae 0f 20 20 4d 4f 56  20 52 35 2c 23 30 0d 01  |...  MOV R5,#0..|
00000300  b8 14 20 20 41 44 52 20  52 37 2c 61 64 6f 6c 6c  |..  ADR R7,adoll|
00000310  61 72 0d 01 c2 10 20 20  4d 4f 56 20 52 31 34 2c  |ar....  MOV R14,|
00000320  23 30 0d 01 cc 16 20 20  53 54 52 42 20 52 31 34  |#0....  STRB R14|
00000330  2c 5b 52 37 5d 2c 23 31  0d 01 d6 14 20 20 42 4c  |,[R7],#1....  BL|
00000340  20 61 64 64 72 65 73 73  5f 61 6e 73 0d 01 e0 19  | address_ans....|
00000350  20 20 2e 6d 61 69 6e 5f  66 6f 72 5f 6c 6f 6f 70  |  .main_for_loop|
00000360  69 66 79 73 32 0d 01 ea  17 20 20 20 20 4c 44 52  |ifys2....    LDR|
00000370  42 20 52 36 2c 5b 52 38  2c 52 35 5d 0d 01 f4 17  |B R6,[R8,R5]....|
00000380  20 20 20 20 53 54 52 42  20 52 36 2c 5b 52 37 2c  |    STRB R6,[R7,|
00000390  52 35 5d 0d 01 fe 12 20  20 20 20 43 4d 50 20 52  |R5]....    CMP R|
000003a0  36 2c 23 31 30 0d 02 08  14 20 20 20 20 41 44 44  |6,#10....    ADD|
000003b0  20 52 35 2c 52 35 2c 23  31 0d 02 12 1c 20 20 42  | R5,R5,#1....  B|
000003c0  4e 45 20 6d 61 69 6e 5f  66 6f 72 5f 6c 6f 6f 70  |NE main_for_loop|
000003d0  69 66 79 73 32 0d 02 1c  04 0d 02 26 16 20 20 42  |ifys2......&.  B|
000003e0  4c 20 67 65 74 5f 61 64  64 72 65 73 73 65 73 0d  |L get_addresses.|
000003f0  02 30 10 20 20 4d 4f 56  20 52 31 34 2c 23 30 0d  |.0.  MOV R14,#0.|
00000400  02 3a 13 20 20 53 54 52  42 20 52 31 34 2c 5b 52  |.:.  STRB R14,[R|
00000410  30 5d 0d 02 44 10 20 20  4d 4f 56 20 52 31 34 2c  |0]..D.  MOV R14,|
00000420  23 31 0d 02 4e 16 20 20  53 54 52 42 20 52 31 34  |#1..N.  STRB R14|
00000430  2c 5b 52 30 2c 23 31 5d  0d 02 58 10 20 20 4d 4f  |,[R0,#1]..X.  MO|
00000440  56 20 52 31 34 2c 23 30  0d 02 62 0f 20 20 4d 4f  |V R14,#0..b.  MO|
00000450  56 20 52 35 2c 23 32 0d  02 6c 1a 20 20 2e 6d 61  |V R5,#2..l.  .ma|
00000460  69 6e 5f 66 6f 72 5f 6c  6f 6f 70 69 66 79 73 63  |in_for_loopifysc|
00000470  31 0d 02 76 18 20 20 20  20 53 54 52 42 20 52 31  |1..v.    STRB R1|
00000480  34 2c 5b 52 30 2c 52 35  5d 0d 02 80 14 20 20 20  |4,[R0,R5]....   |
00000490  20 41 44 44 20 52 35 2c  52 35 2c 23 31 0d 02 8a  | ADD R5,R5,#1...|
000004a0  15 20 20 20 20 43 4d 50  20 52 35 2c 23 61 63 63  |.    CMP R5,#acc|
000004b0  32 25 0d 02 94 1d 20 20  42 4e 45 20 6d 61 69 6e  |2%....  BNE main|
000004c0  5f 66 6f 72 5f 6c 6f 6f  70 69 66 79 73 63 31 0d  |_for_loopifysc1.|
000004d0  02 9e 11 20 20 4d 4f 56  20 52 31 34 2c 23 31 30  |...  MOV R14,#10|
000004e0  0d 02 a8 16 20 20 53 54  52 42 20 52 31 34 2c 5b  |....  STRB R14,[|
000004f0  52 30 2c 52 35 5d 0d 02  b2 04 0d 02 bc 1e 20 20  |R0,R5]........  |
00000500  53 57 49 20 22 4f 53 5f  52 65 61 64 45 73 63 61  |SWI "OS_ReadEsca|
00000510  70 65 53 74 61 74 65 22  0d 02 c6 17 20 20 4c 44  |peState"....  LD|
00000520  4d 43 53 46 44 20 52 31  33 21 2c 7b 50 43 7d 0d  |MCSFD R13!,{PC}.|
00000530  02 d0 04 0d 02 da 12 20  20 41 44 44 20 52 33 2c  |.......  ADD R3,|
00000540  52 33 2c 23 31 0d 02 e4  3b 20 20 53 54 4d 46 44  |R3,#1...;  STMFD|
00000550  20 52 31 33 21 2c 7b 52  30 7d 3a 4c 44 52 20 52  | R13!,{R0}:LDR R|
00000560  30 2c 53 56 49 54 3a 43  4d 50 20 52 33 2c 52 30  |0,SVIT:CMP R3,R0|
00000570  3a 4c 44 4d 46 44 20 52  31 33 21 2c 7b 52 30 7d  |:LDMFD R13!,{R0}|
00000580  0d 02 ee 1a 42 4c 45 20  6d 61 69 6e 5f 66 6f 72  |....BLE main_for|
00000590  5f 6c 6f 6f 70 69 66 79  73 31 0d 02 f8 04 0d 03  |_loopifys1......|
000005a0  02 13 4c 44 4d 46 44 20  52 31 33 21 2c 7b 50 43  |..LDMFD R13!,{PC|
000005b0  7d 0d 03 0c 04 0d 03 16  0c 2e 62 75 66 66 65 72  |}.........buffer|
000005c0  32 0d 03 20 0e a4 42 79  74 65 73 28 33 32 29 0d  |2.. ..Bytes(32).|
000005d0  03 2a 04 0d 03 34 0c 2e  61 64 6f 6c 6c 61 72 0d  |.*...4..adollar.|
000005e0  03 3e 15 a4 42 79 74 65  73 28 61 63 63 75 72 61  |.>..Bytes(accura|
000005f0  63 79 25 29 0d 03 48 05  3a 0d 03 52 05 3a 0d 03  |cy%)..H.:..R.:..|
00000600  5c 1f 2e 6e 75 6d 62 65  72 74 6f 73 61 6d 73 74  |\..numbertosamst|
00000610  72 69 6e 67 66 61 63 74  6f 72 69 61 6c 0d 03 66  |ringfactorial..f|
00000620  14 53 54 4d 46 44 20 52  31 33 21 2c 7b 52 31 34  |.STMFD R13!,{R14|
00000630  7d 0d 03 70 16 53 54 4d  46 44 20 52 31 33 21 2c  |}..p.STMFD R13!,|
00000640  7b 52 30 2d 52 39 7d 0d  03 7a 05 3a 0d 03 84 0d  |{R0-R9}..z.:....|
00000650  4d 4f 56 20 52 39 2c 52  31 0d 03 8e 04 0d 03 98  |MOV R9,R1.......|
00000660  0d 4d 4f 56 20 52 30 2c  52 33 0d 03 a2 11 41 44  |.MOV R0,R3....AD|
00000670  52 20 52 31 2c 62 75 66  66 65 72 0d 03 ac 0e 4d  |R R1,buffer....M|
00000680  4f 56 20 52 32 2c 23 33  32 0d 03 b6 1d 53 57 49  |OV R2,#32....SWI|
00000690  20 22 4f 53 5f 43 6f 6e  76 65 72 74 43 61 72 64  | "OS_ConvertCard|
000006a0  69 6e 61 6c 34 22 0d 03  c0 0d 4d 4f 56 20 52 36  |inal4"....MOV R6|
000006b0  2c 23 31 0d 03 ca 14 2e  6e 74 73 66 6f 72 5f 6c  |,#1.....ntsfor_l|
000006c0  6f 6f 70 69 66 79 31 0d  03 d4 15 20 20 4c 44 52  |oopify1....  LDR|
000006d0  42 20 52 35 2c 5b 52 30  5d 2c 23 31 0d 03 de 17  |B R5,[R0],#1....|
000006e0  20 20 53 55 42 20 52 35  2c 52 35 2c 23 97 28 22  |  SUB R5,R5,#.("|
000006f0  30 22 29 0d 03 e8 15 20  20 53 54 52 42 20 52 35  |0")....  STRB R5|
00000700  2c 5b 52 39 2c 52 36 5d  0d 03 f2 12 20 20 41 44  |,[R9,R6]....  AD|
00000710  44 20 52 36 2c 52 36 2c  23 31 0d 03 fc 0f 20 20  |D R6,R6,#1....  |
00000720  43 4d 50 20 52 30 2c 52  31 0d 04 06 17 42 4c 45  |CMP R0,R1....BLE|
00000730  20 6e 74 73 66 6f 72 5f  6c 6f 6f 70 69 66 79 31  | ntsfor_loopify1|
00000740  0d 04 10 0f 4d 4f 56 20  52 31 34 2c 23 31 30 0d  |....MOV R14,#10.|
00000750  04 1a 10 53 55 42 20 52  36 2c 52 36 2c 23 31 0d  |...SUB R6,R6,#1.|
00000760  04 24 14 53 54 52 42 20  52 31 34 2c 5b 52 39 2c  |.$.STRB R14,[R9,|
00000770  52 36 5d 0d 04 2e 05 3a  0d 04 38 16 4c 44 4d 46  |R6]....:..8.LDMF|
00000780  44 20 52 31 33 21 2c 7b  52 30 2d 52 39 7d 0d 04  |D R13!,{R0-R9}..|
00000790  42 13 4c 44 4d 46 44 20  52 31 33 21 2c 7b 50 43  |B.LDMFD R13!,{PC|
000007a0  7d 0d 04 4c 0b 2e 62 75  66 66 65 72 0d 04 56 0e  |}..L..buffer..V.|
000007b0  a4 42 79 74 65 73 28 33  32 29 0d 04 60 05 3a 0d  |.Bytes(32)..`.:.|
000007c0  04 6a 05 3a 0d 04 74 0b  2e 64 69 76 72 65 73 0d  |.j.:..t..divres.|
000007d0  04 7e 0a 45 51 55 44 20  30 0d 04 88 0b 2e 6d 6f  |.~.EQUD 0.....mo|
000007e0  64 72 65 73 0d 04 92 0a  45 51 55 44 20 30 0d 04  |dres....EQUD 0..|
000007f0  9c 04 0d 04 a6 19 2e 62  65 67 69 6e 5f 6d 75 6c  |.......begin_mul|
00000800  74 69 70 6c 69 63 61 74  69 6f 6e 0d 04 b0 14 53  |tiplication....S|
00000810  54 4d 46 44 20 52 31 33  21 2c 7b 52 31 34 7d 0d  |TMFD R13!,{R14}.|
00000820  04 ba 17 53 54 4d 46 44  20 52 31 33 21 2c 7b 52  |...STMFD R13!,{R|
00000830  30 2d 52 31 32 7d 0d 04  c4 04 0d 04 ce 04 0d 04  |0-R12}..........|
00000840  d8 24 5c 66 69 6e 64 20  65 6e 64 20 6f 66 20 6f  |.$\find end of o|
00000850  70 65 72 61 6e 64 31 20  80 20 6f 70 65 72 61 6e  |perand1 . operan|
00000860  64 32 0d 04 e2 04 0d 04  ec 0d 4d 4f 56 20 52 33  |d2........MOV R3|
00000870  2c 52 30 0d 04 f6 0d 4d  4f 56 20 52 35 2c 23 30  |,R0....MOV R5,#0|
00000880  0d 05 00 13 2e 6c 6f 6f  70 5f 67 65 74 5f 65 6e  |.....loop_get_en|
00000890  64 31 42 0d 05 0a 15 20  20 4c 44 52 42 20 52 34  |d1B....  LDRB R4|
000008a0  2c 5b 52 33 5d 2c 23 31  0d 05 14 12 20 20 41 44  |,[R3],#1....  AD|
000008b0  44 20 52 35 2c 52 35 2c  23 31 0d 05 1e 10 20 20  |D R5,R5,#1....  |
000008c0  43 4d 50 20 52 34 2c 23  31 30 0d 05 28 16 42 4e  |CMP R4,#10..(.BN|
000008d0  45 20 6c 6f 6f 70 5f 67  65 74 5f 65 6e 64 31 42  |E loop_get_end1B|
000008e0  0d 05 32 04 0d 05 3c 0d  4d 4f 56 20 52 33 2c 52  |..2...<.MOV R3,R|
000008f0  31 0d 05 46 0d 4d 4f 56  20 52 36 2c 23 30 0d 05  |1..F.MOV R6,#0..|
00000900  50 13 2e 6c 6f 6f 70 5f  67 65 74 5f 65 6e 64 32  |P..loop_get_end2|
00000910  42 0d 05 5a 15 20 20 4c  44 52 42 20 52 34 2c 5b  |B..Z.  LDRB R4,[|
00000920  52 33 5d 2c 23 31 0d 05  64 12 20 20 41 44 44 20  |R3],#1..d.  ADD |
00000930  52 36 2c 52 36 2c 23 31  0d 05 6e 10 20 20 43 4d  |R6,R6,#1..n.  CM|
00000940  50 20 52 34 2c 23 31 30  0d 05 78 16 42 4e 45 20  |P R4,#10..x.BNE |
00000950  6c 6f 6f 70 5f 67 65 74  5f 65 6e 64 32 42 0d 05  |loop_get_end2B..|
00000960  82 04 0d 05 8c 42 5c a9  47 54 48 20 ca 20 4f 50  |.....B\.GTH . OP|
00000970  45 52 41 4e 44 20 31 20  49 53 20 52 45 54 55 52  |ERAND 1 IS RETUR|
00000980  4e 45 44 20 49 4e 20 52  35 2c 20 a9 47 54 48 20  |NED IN R5, .GTH |
00000990  ca 20 4f 50 45 52 41 4e  44 20 32 20 49 53 20 49  |. OPERAND 2 IS I|
000009a0  4e 20 52 36 0d 05 96 04  0d 05 a0 31 41 44 44 20  |N R6.......1ADD |
000009b0  52 37 2c 52 35 2c 52 36  20 20 20 20 20 20 20 20  |R7,R5,R6        |
000009c0  20 20 20 20 20 5c 43 4f  4e 54 41 49 4e 53 20 b8  |     \CONTAINS .|
000009d0  54 41 4c 20 a9 47 54 48  53 0d 05 aa 04 0d 05 b4  |TAL .GTHS.......|
000009e0  2b 5c 52 45 47 49 53 54  45 52 53 20 41 56 41 49  |+\REGISTERS AVAI|
000009f0  4c 41 42 4c 45 20 3d 20  52 33 2c 52 34 2c 52 38  |LABLE = R3,R4,R8|
00000a00  2d 52 31 32 2c 52 31 34  0d 05 be 04 0d 05 c8 1e  |-R12,R14........|
00000a10  5c 73 74 72 75 63 74 75  72 65 20 46 6f 72 2e 2e  |\structure For..|
00000a20  6e 65 78 74 20 6c 6f 6f  70 2d 0d 05 d2 04 0d 05  |next loop-......|
00000a30  dc 0d 4d 4f 56 20 52 33  2c 23 30 0d 05 e6 0d 4d  |..MOV R3,#0....M|
00000a40  4f 56 20 52 34 2c 52 32  0d 05 f0 1f 53 55 42 20  |OV R4,R2....SUB |
00000a50  52 31 34 2c 52 37 2c 23  31 20 5c 4c 4f 4f 50 20  |R14,R7,#1 \LOOP |
00000a60  43 4f 55 4e 54 45 52 0d  05 fa 11 2e 66 6f 72 5f  |COUNTER.....for_|
00000a70  6c 6f 6f 70 69 66 79 31  0d 06 04 15 20 20 53 54  |loopify1....  ST|
00000a80  52 42 20 52 33 2c 5b 52  34 5d 2c 23 31 0d 06 0e  |RB R3,[R4],#1...|
00000a90  15 20 20 53 55 42 53 20  52 31 34 2c 52 31 34 2c  |.  SUBS R14,R14,|
00000aa0  23 31 0d 06 18 14 42 4e  45 20 66 6f 72 5f 6c 6f  |#1....BNE for_lo|
00000ab0  6f 70 69 66 79 31 0d 06  22 0e 4d 4f 56 20 52 33  |opify1..".MOV R3|
00000ac0  2c 23 31 30 0d 06 2c 10  53 55 42 20 52 34 2c 52  |,#10..,.SUB R4,R|
00000ad0  34 2c 23 31 0d 06 36 10  53 54 52 42 20 52 33 2c  |4,#1..6.STRB R3,|
00000ae0  5b 52 34 5d 0d 06 40 10  41 44 44 20 52 34 2c 52  |[R4]..@.ADD R4,R|
00000af0  34 2c 23 31 0d 06 4a 04  0d 06 54 26 53 55 42 20  |4,#1..J...T&SUB |
00000b00  52 31 31 2c 52 36 2c 23  32 20 20 20 5c 4c 4f 4f  |R11,R6,#2   \LOO|
00000b10  50 20 43 4f 55 4e 54 45  52 20 28 4a 25 29 0d 06  |P COUNTER (J%)..|
00000b20  5e 11 2e 66 6f 72 5f 6c  6f 6f 70 69 66 79 32 0d  |^..for_loopify2.|
00000b30  06 68 12 20 20 4d 4f 56  20 63 61 72 72 79 2c 23  |.h.  MOV carry,#|
00000b40  30 0d 06 72 21 20 20 4c  44 52 42 20 52 33 2c 5b  |0..r!  LDRB R3,[|
00000b50  52 31 2c 52 31 31 5d 20  20 5c 47 25 3d 42 25 3f  |R1,R11]  \G%=B%?|
00000b60  4a 25 0d 06 7c 13 20 20  41 44 44 20 52 34 2c 52  |J%..|.  ADD R4,R|
00000b70  32 2c 52 31 31 0d 06 86  1f 20 20 41 44 44 20 52  |2,R11....  ADD R|
00000b80  34 2c 52 34 2c 23 31 20  20 5c 56 25 3d 44 25 2b  |4,R4,#1  \V%=D%+|
00000b90  4a 25 2b 31 0d 06 90 26  20 20 53 55 42 20 52 31  |J%+1...&  SUB R1|
00000ba0  30 2c 52 35 2c 23 32 20  5c 4c 4f 4f 50 20 43 4f  |0,R5,#2 \LOOP CO|
00000bb0  55 4e 54 45 52 20 28 4c  25 29 0d 06 9a 13 20 20  |UNTER (L%)....  |
00000bc0  2e 66 6f 72 5f 6c 6f 6f  70 69 66 79 33 0d 06 a4  |.for_loopify3...|
00000bd0  22 20 20 20 20 4c 44 52  42 20 52 39 2c 5b 52 30  |"    LDRB R9,[R0|
00000be0  2c 52 31 30 5d 20 5c 48  25 3d 41 25 3f 4c 25 0d  |,R10] \H%=A%?L%.|
00000bf0  06 ae 15 20 20 20 20 4d  55 4c 20 52 31 34 2c 52  |...    MUL R14,R|
00000c00  33 2c 52 39 0d 06 b8 19  20 20 20 20 41 44 44 20  |3,R9....    ADD |
00000c10  52 31 34 2c 52 31 34 2c  63 61 72 72 79 0d 06 c2  |R14,R14,carry...|
00000c20  17 20 20 20 20 53 54 4d  46 44 20 52 31 33 21 2c  |.    STMFD R13!,|
00000c30  7b 52 38 7d 0d 06 cc 18  20 20 20 20 4c 44 52 42  |{R8}....    LDRB|
00000c40  20 52 38 2c 5b 52 34 2c  52 31 30 5d 0d 06 d6 16  | R8,[R4,R10]....|
00000c50  20 20 20 20 41 44 44 20  52 31 34 2c 52 31 34 2c  |    ADD R14,R14,|
00000c60  52 38 0d 06 e0 04 0d 06  ea 20 20 20 20 20 5c 41  |R8.......     \A|
00000c70  53 53 45 4d 42 4c 45 20  83 20 80 20 81 20 46 55  |SSEMBLE . . . FU|
00000c80  4e 43 54 49 4f 4e 0d 06  f4 1a 20 20 20 20 53 54  |NCTION....    ST|
00000c90  4d 46 44 20 52 31 33 21  2c 7b 52 30 2d 52 36 7d  |MFD R13!,{R0-R6}|
00000ca0  0d 06 fe 12 20 20 20 20  4d 4f 56 20 52 30 2c 52  |....    MOV R0,R|
00000cb0  31 34 0d 07 08 12 20 20  20 20 4d 4f 56 20 52 31  |14....    MOV R1|
00000cc0  2c 23 31 30 0d 07 12 17  20 20 20 20 80 53 20 52  |,#10....    .S R|
00000cd0  36 2c 52 30 2c 23 31 3c  3c 33 31 0d 07 1c 16 20  |6,R0,#1<<31.... |
00000ce0  20 20 20 52 53 42 4d 49  20 52 30 2c 52 30 2c 23  |   RSBMI R0,R0,#|
00000cf0  30 0d 07 26 12 20 20 20  20 82 20 52 35 2c 52 36  |0..&.    . R5,R6|
00000d00  2c 52 31 0d 07 30 11 20  20 20 20 43 4d 50 20 52  |,R1..0.    CMP R|
00000d10  31 2c 23 30 0d 07 3a 16  20 20 20 20 52 53 42 4d  |1,#0..:.    RSBM|
00000d20  49 20 52 31 2c 52 31 2c  23 30 0d 07 44 04 0d 07  |I R1,R1,#0..D...|
00000d30  4e 11 20 20 20 20 4d 4f  56 20 52 32 2c 23 30 0d  |N.    MOV R2,#0.|
00000d40  07 58 11 20 20 20 20 4d  4f 56 20 52 33 2c 23 30  |.X.    MOV R3,#0|
00000d50  0d 07 62 15 20 20 20 20  4d 4f 56 20 52 34 2c 23  |..b.    MOV R4,#|
00000d60  31 3c 3c 33 31 0d 07 6c  04 0d 07 76 16 20 20 20  |1<<31..l...v.   |
00000d70  20 2e 64 69 76 69 73 69  6f 6e 5f 6c 6f 6f 70 0d  | .division_loop.|
00000d80  07 80 18 20 20 20 20 4d  4f 56 53 20 52 30 2c 52  |...    MOVS R0,R|
00000d90  30 2c 41 53 4c 23 31 0d  07 8a 14 20 20 20 20 41  |0,ASL#1....    A|
00000da0  44 43 20 52 32 2c 52 32  2c 52 32 0d 07 94 11 20  |DC R2,R2,R2.... |
00000db0  20 20 20 43 4d 50 20 52  32 2c 52 31 0d 07 9e 16  |   CMP R2,R1....|
00000dc0  20 20 20 20 53 55 42 47  45 20 52 32 2c 52 32 2c  |    SUBGE R2,R2,|
00000dd0  52 31 0d 07 a8 15 20 20  20 20 84 52 47 45 20 52  |R1....    .RGE R|
00000de0  33 2c 52 33 2c 52 34 0d  07 b2 18 20 20 20 20 4d  |3,R3,R4....    M|
00000df0  4f 56 53 20 52 34 2c 52  34 2c 4c 53 52 23 31 0d  |OVS R4,R4,LSR#1.|
00000e00  07 bc 19 20 20 20 20 42  4e 45 20 64 69 76 69 73  |...    BNE divis|
00000e10  69 6f 6e 5f 6c 6f 6f 70  0d 07 c6 04 0d 07 d0 11  |ion_loop........|
00000e20  20 20 20 20 43 4d 50 20  52 35 2c 23 30 0d 07 da  |    CMP R5,#0...|
00000e30  16 20 20 20 20 52 53 42  4d 49 20 52 33 2c 52 33  |.    RSBMI R3,R3|
00000e40  2c 23 30 0d 07 e4 11 20  20 20 20 43 4d 50 20 52  |,#0....    CMP R|
00000e50  36 2c 23 30 0d 07 ee 16  20 20 20 20 52 53 42 4d  |6,#0....    RSBM|
00000e60  49 20 52 32 2c 52 32 2c  23 30 0d 07 f8 04 0d 08  |I R2,R2,#0......|
00000e70  02 16 20 20 20 20 53 54  52 20 52 33 2c 64 69 76  |..    STR R3,div|
00000e80  72 65 73 32 0d 08 0c 16  20 20 20 20 53 54 52 20  |res2....    STR |
00000e90  52 32 2c 6d 6f 64 72 65  73 32 0d 08 16 04 0d 08  |R2,modres2......|
00000ea0  20 1a 20 20 20 20 4c 44  4d 46 44 20 52 31 33 21  | .    LDMFD R13!|
00000eb0  2c 7b 52 30 2d 52 36 7d  0d 08 2a 04 0d 08 34 16  |,{R0-R6}..*...4.|
00000ec0  20 20 20 20 4c 44 52 20  52 38 2c 6d 6f 64 72 65  |    LDR R8,modre|
00000ed0  73 32 0d 08 3e 27 20 20  20 20 53 54 52 42 20 52  |s2..>'    STRB R|
00000ee0  38 2c 5b 52 34 2c 52 31  30 5d 20 20 20 20 20 5c  |8,[R4,R10]     \|
00000ef0  e3 4d 45 52 4c 59 20 52  38 0d 08 48 17 20 20 20  |.MERLY R8..H.   |
00000f00  20 4c 44 4d 46 44 20 52  31 33 21 2c 7b 52 38 7d  | LDMFD R13!,{R8}|
00000f10  0d 08 52 16 20 20 20 20  4c 44 52 20 52 38 2c 64  |..R.    LDR R8,d|
00000f20  69 76 72 65 73 32 0d 08  5c 17 20 20 20 20 53 55  |ivres2..\.    SU|
00000f30  42 53 20 52 31 30 2c 52  31 30 2c 23 31 0d 08 66  |BS R10,R10,#1..f|
00000f40  16 20 20 42 4e 45 20 66  6f 72 5f 6c 6f 6f 70 69  |.  BNE for_loopi|
00000f50  66 79 33 0d 08 70 16 20  20 53 54 52 42 20 52 38  |fy3..p.  STRB R8|
00000f60  2c 5b 52 34 2c 52 31 30  5d 0d 08 7a 15 20 20 53  |,[R4,R10]..z.  S|
00000f70  55 42 53 20 52 31 31 2c  52 31 31 2c 23 31 0d 08  |UBS R11,R11,#1..|
00000f80  84 14 42 4e 45 20 66 6f  72 5f 6c 6f 6f 70 69 66  |..BNE for_loopif|
00000f90  79 32 0d 08 8e 04 0d 08  98 17 42 4c 20 52 65 6d  |y2........BL Rem|
00000fa0  6f 76 65 5f 4c 65 61 64  69 6e 67 30 73 0d 08 a2  |ove_Leading0s...|
00000fb0  04 0d 08 ac 17 4c 44 4d  46 44 20 52 31 33 21 2c  |.....LDMFD R13!,|
00000fc0  7b 52 30 2d 52 31 32 7d  0d 08 b6 13 4c 44 4d 46  |{R0-R12}....LDMF|
00000fd0  44 20 52 31 33 21 2c 7b  50 43 7d 0d 08 c0 04 0d  |D R13!,{PC}.....|
00000fe0  08 ca 0c 2e 64 69 76 72  65 73 32 0d 08 d4 0a 45  |....divres2....E|
00000ff0  51 55 44 20 30 0d 08 de  0c 2e 6d 6f 64 72 65 73  |QUD 0.....modres|
00001000  32 0d 08 e8 04 0d 08 f2  0c 2e 64 69 76 72 65 73  |2.........divres|
00001010  33 0d 08 fc 0a 45 51 55  44 20 30 0d 09 06 0c 2e  |3....EQUD 0.....|
00001020  6d 6f 64 72 65 73 33 0d  09 10 0a 45 51 55 44 20  |modres3....EQUD |
00001030  30 0d 09 1a 04 0d 09 24  04 0d 09 2e 15 2e 52 65  |0......$......Re|
00001040  6d 6f 76 65 5f 4c 65 61  64 69 6e 67 30 73 0d 09  |move_Leading0s..|
00001050  38 14 53 54 4d 46 44 20  52 31 33 21 2c 7b 52 31  |8.STMFD R13!,{R1|
00001060  34 7d 0d 09 42 05 3a 0d  09 4c 0d 4d 4f 56 20 52  |4}..B.:..L.MOV R|
00001070  34 2c 23 30 0d 09 56 12  2e 6c 6f 6f 70 5f 72 65  |4,#0..V..loop_re|
00001080  6d 6f 76 65 30 73 0d 09  60 13 4c 44 52 42 20 52  |move0s..`.LDRB R|
00001090  35 2c 5b 52 32 2c 52 34  5d 0d 09 6a 0d 43 4d 50  |5,[R2,R4]..j.CMP|
000010a0  20 52 35 2c 23 30 0d 09  74 12 41 44 44 45 51 20  | R5,#0..t.ADDEQ |
000010b0  52 34 2c 52 34 2c 23 31  0d 09 7e 15 42 45 51 20  |R4,R4,#1..~.BEQ |
000010c0  6c 6f 6f 70 5f 72 65 6d  6f 76 65 30 73 0d 09 88  |loop_remove0s...|
000010d0  04 0d 09 92 11 41 44 52  20 52 36 2c 61 6e 73 77  |.....ADR R6,answ|
000010e0  65 72 0d 09 9c 0d 4d 4f  56 20 52 37 2c 23 30 0d  |er....MOV R7,#0.|
000010f0  09 a6 15 2e 6c 6f 6f 70  5f 73 77 61 70 5f 73 74  |....loop_swap_st|
00001100  72 69 6e 67 0d 09 b0 13  4c 44 52 42 20 52 35 2c  |ring....LDRB R5,|
00001110  5b 52 32 2c 52 34 5d 0d  09 ba 13 53 54 52 42 20  |[R2,R4]....STRB |
00001120  52 35 2c 5b 52 36 2c 52  37 5d 0d 09 c4 10 41 44  |R5,[R6,R7]....AD|
00001130  44 20 52 34 2c 52 34 2c  23 31 0d 09 ce 10 41 44  |D R4,R4,#1....AD|
00001140  44 20 52 37 2c 52 37 2c  23 31 0d 09 d8 0e 43 4d  |D R7,R7,#1....CM|
00001150  50 20 52 35 2c 23 31 30  0d 09 e2 18 42 4e 45 20  |P R5,#10....BNE |
00001160  6c 6f 6f 70 5f 73 77 61  70 5f 73 74 72 69 6e 67  |loop_swap_string|
00001170  0d 09 ec 04 0d 09 f6 04  0d 0a 00 05 3a 0d 0a 0a  |............:...|
00001180  13 4c 44 4d 46 44 20 52  31 33 21 2c 7b 50 43 7d  |.LDMFD R13!,{PC}|
00001190  0d 0a 14 04 0d 0a 1e 10  2e 61 64 64 72 65 73 73  |.........address|
000011a0  5f 61 6e 73 0d 0a 28 14  53 54 4d 46 44 20 52 31  |_ans..(.STMFD R1|
000011b0  33 21 2c 7b 52 31 34 7d  0d 0a 32 11 41 44 52 20  |3!,{R14}..2.ADR |
000011c0  52 38 2c 61 6e 73 77 65  72 0d 0a 3c 13 4c 44 4d  |R8,answer..<.LDM|
000011d0  46 44 20 52 31 33 21 2c  7b 50 43 7d 0d 0a 46 0b  |FD R13!,{PC}..F.|
000011e0  2e 61 6e 73 77 65 72 0d  0a 50 15 a4 42 79 74 65  |.answer..P..Byte|
000011f0  73 28 61 63 63 75 72 61  63 79 25 29 0d 0a 5a 04  |s(accuracy%)..Z.|
00001200  0d 0a 64 04 0d 0a 6e 12  2e 67 65 74 5f 61 64 64  |..d...n..get_add|
00001210  72 65 73 73 65 73 0d 0a  78 14 53 54 4d 46 44 20  |resses..x.STMFD |
00001220  52 31 33 21 2c 7b 52 31  34 7d 0d 0a 82 13 41 44  |R13!,{R14}....AD|
00001230  52 20 52 30 2c 6f 70 65  72 61 6e 64 31 0d 0a 8c  |R R0,operand1...|
00001240  0b 42 20 6e 65 78 74 31  0d 0a 96 0d 2e 6f 70 65  |.B next1.....ope|
00001250  72 61 6e 64 31 0d 0a a0  15 a4 42 79 74 65 73 28  |rand1.....Bytes(|
00001260  61 63 63 75 72 61 63 79  25 29 0d 0a aa 0a 2e 6e  |accuracy%).....n|
00001270  65 78 74 31 0d 0a b4 13  41 44 52 20 52 31 2c 6f  |ext1....ADR R1,o|
00001280  70 65 72 61 6e 64 32 0d  0a be 0b 42 20 6e 65 78  |perand2....B nex|
00001290  74 32 0d 0a c8 0d 2e 6f  70 65 72 61 6e 64 32 0d  |t2.....operand2.|
000012a0  0a d2 15 a4 42 79 74 65  73 28 61 63 63 75 72 61  |....Bytes(accura|
000012b0  63 79 25 29 0d 0a dc 0a  2e 6e 65 78 74 32 0d 0a  |cy%).....next2..|
000012c0  e6 11 41 44 52 20 52 32  2c 72 65 73 75 6c 74 0d  |..ADR R2,result.|
000012d0  0a f0 0b 42 20 6e 65 78  74 33 0d 0a fa 0b 2e 72  |...B next3.....r|
000012e0  65 73 75 6c 74 0d 0b 04  15 a4 42 79 74 65 73 28  |esult.....Bytes(|
000012f0  61 63 63 75 72 61 63 79  25 29 0d 0b 0e 0a 2e 6e  |accuracy%).....n|
00001300  65 78 74 33 0d 0b 18 14  41 44 52 20 52 31 32 2c  |ext3....ADR R12,|
00001310  65 5f 73 6f 5f 66 61 72  0d 0b 22 13 4c 44 4d 46  |e_so_far..".LDMF|
00001320  44 20 52 31 33 21 2c 7b  50 43 7d 0d 0b 2c 0d 2e  |D R13!,{PC}..,..|
00001330  65 5f 73 6f 5f 66 61 72  0d 0b 36 15 a4 42 79 74  |e_so_far..6..Byt|
00001340  65 73 28 61 63 63 75 72  61 63 79 25 29 0d 0b 40  |es(accuracy%)..@|
00001350  05 3a 0d 0b 4a 05 3a 0d  0b 54 0b 2e 66 69 6c 6c  |.:..J.:..T..fill|
00001360  5f 65 0d 0b 5e 14 53 54  4d 46 44 20 52 31 33 21  |_e..^.STMFD R13!|
00001370  2c 7b 52 31 34 7d 0d 0b  68 05 3a 0d 0b 72 0d 4d  |,{R14}..h.:..r.M|
00001380  4f 56 20 52 35 2c 23 30  0d 0b 7c 0d 4d 4f 56 20  |OV R5,#0..|.MOV |
00001390  52 36 2c 23 30 0d 0b 86  10 2e 6c 6f 6f 70 5f 66  |R6,#0.....loop_f|
000013a0  69 6c 6c 5f 65 0d 0b 90  16 20 20 53 54 52 42 20  |ill_e....  STRB |
000013b0  52 35 2c 5b 52 31 32 2c  52 36 5d 0d 0b 9a 12 20  |R5,[R12,R6].... |
000013c0  20 41 44 44 20 52 36 2c  52 36 2c 23 31 0d 0b a4  | ADD R6,R6,#1...|
000013d0  18 20 20 43 4d 50 20 52  36 2c 23 61 63 63 75 72  |.  CMP R6,#accur|
000013e0  61 63 79 32 25 0d 0b ae  13 42 4e 45 20 6c 6f 6f  |acy2%....BNE loo|
000013f0  70 5f 66 69 6c 6c 5f 65  0d 0b b8 0e 4d 4f 56 20  |p_fill_e....MOV |
00001400  52 35 2c 23 31 30 0d 0b  c2 10 53 55 42 20 52 36  |R5,#10....SUB R6|
00001410  2c 52 36 2c 23 31 0d 0b  cc 14 53 54 52 42 20 52  |,R6,#1....STRB R|
00001420  35 2c 5b 52 31 32 2c 52  36 5d 0d 0b d6 05 3a 0d  |5,[R12,R6]....:.|
00001430  0b e0 13 4c 44 4d 46 44  20 52 31 33 21 2c 7b 50  |...LDMFD R13!,{P|
00001440  43 7d 0d 0b ea 04 0d 0b  f4 05 5d 0d 0b fe 05 ed  |C}........].....|
00001450  0d 0c 08 05 3a 0d 0c 12  0e 53 56 49 54 21 30 3d  |....:....SVIT!0=|
00001460  69 74 25 0d 0c 1c 18 f1  20 22 43 61 6c 63 75 6c  |it%..... "Calcul|
00001470  61 74 69 6e 67 2e 2e 2e  2e 2e 22 0d 0c 26 13 d6  |ating....."..&..|
00001480  20 46 61 63 74 6f 72 69  61 6c 6c 69 66 79 0d 0c  | Factoriallify..|
00001490  30 04 0d 0c 3a 14 f4 20  2a 53 50 4f 4f 4c 20 45  |0...:.. *SPOOL E|
000014a0  5f 46 49 4c 45 33 0d 0c  44 07 20 20 f1 0d 0c 4e  |_FILE3..D.  ...N|
000014b0  07 20 20 f1 0d 0c 58 13  20 20 f1 20 69 74 25 3b  |.  ...X.  . it%;|
000014c0  22 21 20 3d 20 22 3b 0d  0c 62 09 20 20 41 3d 30  |"! = ";..b.  A=0|
000014d0  0d 0c 6c 07 20 20 f5 0d  0c 76 17 20 20 20 20 f1  |..l.  ...v.    .|
000014e0  20 c3 28 61 64 6f 6c 6c  61 72 3f 41 29 3b 0d 0c  | .(adollar?A);..|
000014f0  80 0c 20 20 20 20 41 2b  3d 31 0d 0c 8a 16 20 20  |..    A+=1....  |
00001500  fd 20 28 61 64 6f 6c 6c  61 72 3f 41 29 3d 31 30  |. (adollar?A)=10|
00001510  0d 0c 94 0c f4 20 2a 53  50 4f 4f 4c 0d 0c 9e 04  |..... *SPOOL....|
00001520  0d 0c a8 05 e0 0d 0c b2  05 3a 0d 0c bc 11 dd a4  |.........:......|
00001530  42 79 74 65 73 28 69 6e  63 25 29 0d 0c c6 0c 50  |Bytes(inc%)....P|
00001540  25 2b 3d 69 6e 63 25 0d  0c d0 06 3d 30 0d 0c da  |%+=inc%....=0...|
00001550  05 3a 0d ff                                       |.:..|
00001554