]> matita.cs.unibo.it Git - helm.git/blob - matita/matita/contribs/assembly/freescale/Doc/numeri_perfetti.txt
mod change (-x)
[helm.git] / matita / matita / contribs / assembly / freescale / Doc / numeri_perfetti.txt
1 \r
2 NUMERI AUREI: Somma divisori(x)=x\r
3  Fino a 0xFFFF sono 6/28/496/8128\r
4 \r
5 static unsigned int result[16]={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };\r
6                             -> { 6, 28, 496, 8128 ... }\r
7 \r
8 void main(void)\r
9 {\r
10 unsigned int res_pos=0,tested_num=0,divisor=0;\r
11 unsigned long int acc=0;\r
12 \r
13 for(tested_num=1;tested_num<2;tested_num++)\r
14  {\r
15  for(acc=0,divisor=1;divisor<tested_num;divisor++)\r
16   {\r
17   if(!(tested_num%divisor))\r
18    { acc+=divisor; }\r
19   }\r
20  \r
21  if(acc==tested_num)\r
22   { result[res_pos++]=tested_num; }\r
23  }\r
24 }\r
25 \r
26 *************************************\r
27 \r
28 A: 0x00 HX: 0x1A00 PC: 0x18BE SP: 0x016F Z:1 (I:1)\r
29 A: 0x00 HX: num    PC: 0x1950 SP: 0x016F Z:1 (I:1)\r
30 \r
31 T(n) = 80+65*sum[i=1,n]{sum[k=1,i]{k}}\r
32 cioe'\r
33 T(n) = 80+(65*n*(n+1)*(n+2))/6\r
34 \r
35    n  clocki clockf        clocktot      T(n)\r
36 1000: 543 -> 156.302.031 | 156.301.488 | 10.865.855.080\r
37  900: 543 -> 121.788.732 | 121.788.189 |  7.923.844.580\r
38  800: 543 ->  91.818.647 |  91.818.104 |  5.567.484.080\r
39  700: 543 ->  66.162.370 |  66.161.827 |  3.731.773.580\r
40  600: 543 ->  44.814.748 |  44.814.205 |  2.351.713.080\r
41  500: 543 ->  27.866.608 |  27.866.065 |  1.362.302.580\r
42 *497: 543 ->  27.430.121 |  27.429.578 |  1.337.976.265\r
43  496: 543 ->  27.284.097 |  27.283.554 |  1.329.932.320\r
44  400: 543 ->  15.384.865 |  15.384.322 |    698.542.080\r
45  300: 543 ->   7.308.541 |   7.307.998 |    295.431.580\r
46  200: 543 ->   3.178.553 |   3.178.010 |     87.971.080\r
47  100: 543 ->     826.875 |     826.332 |     11.160.580\r
48   50: 543 ->     218.618 |     218.075 |      1.436.580 \r
49  *29: 543 ->      77.875 |      77.332 |        292.255\r
50   28: 543 ->      72.452 |      71.909 |        263.980\r
51   20: 543 ->      38.104 |      37.561 |        100.180\r
52   10: 543 ->      10.307 |       9.764 |         14.380\r
53   *7: 543 ->       5.411 |       4.868 |          5.540\r
54    6: 543 ->       3.778 |       3.235 |          3.720\r
55    5: 543 ->       2.849 |       2.306 |          2.355\r
56    4: 543 ->       1.813 |       1.270 |          1.380\r
57    3: 543 ->       1.182 |         639 |            730\r
58    2: 543 ->         700 |         157 |            340\r
59    1: 543 ->         623 |          80 |            145\r
60 \r
61 quindi tempo di esecuzione e T(n), cioe' o(n^3)\r
62 \r
63 *********************************************\r
64 \r
65 static unsigned int result[16]={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };\r
66 word result[16] = 0x0100\r
67 \r
68 void main(void)\r
69 {\r
70 unsigned int res_pos=0,tested_num=0,divisor=0;\r
71 unsigned long int acc=0;\r
72 \r
73 18BE A7 F6    AIS #-10 <----------- INGRESSO MAIN\r
74 18C0 95       TSX\r
75 18C1 6F 09    CLR 9,X\r
76 18C3 6F 08    CLR 8,X\r
77 18C5 6F 01    CLR 1,X\r
78 18C7 7F       CLR ,X\r
79 18C8 6F 03    CLR 3,X\r
80 18CA 6F 02    CLR 2,X\r
81 18CC CD 19 51 JSR 0x1951 ; 0x1951\r
82 \r
83 for(tested_num=1;tested_num<2;tested_num++)\r
84  {\r
85 \r
86 18CF 9E FF 01 STHX 1,SP\r
87 18D2 20 72    BRA *+116 ; 0x1946\r
88 18D4 AD 7B    BSR *+125 ; 0x1951\r
89 18D6 9E FF 03 STHX 3,SP\r
90 \r
91  for(acc=0,divisor=1;divisor<tested_num;divisor++)\r
92   {\r
93   if(!(tested_num%divisor))\r
94    { acc+=divisor; }\r
95   }\r
96 \r
97 18D9 20 3B    BRA *+61 ; 0x1916\r
98 18DB 9E FE 01 LDHX 1,SP\r
99 18DE 89       PSHX\r
100 18DF 8B       PSHH\r
101 18E0 9E FE 05 LDHX 5,SP\r
102 18E3 CD 1A 1A JSR 0x1A1A ; 0x1A1A\r
103 18E6 A7 02    AIS #2\r
104 18E8 65 00 00 CPHX #0x0000\r
105 18EB 26 1F    BNE *+33 ; 0x190C\r
106 18ED 95       TSX\r
107 18EE E6 03    LDA 3,X\r
108 18F0 EE 02    LDX 2,X\r
109 18F2 87       PSHA\r
110 18F3 89       PSHX\r
111 18F4 4F       CLRA\r
112 18F5 87       PSHA\r
113 18F6 87       PSHA\r
114 18F7 95       TSX\r
115 18F8 89       PSHX\r
116 19F9 8B       PSHH\r
117 18FA AF 08    AIX #8\r
118 18FC 89       PSHX\r
119 18FD 8B       PSHH\r
120 18FE 9E FE 03 LDHX 3,SP\r
121 1901 CD 1A 2A JSR 0x1A2A ; 0x1A2A\r
122 1904 95       TSX\r
123 1905 AF 0E    AIX #14\r
124 1907 CD 1A 30 JSR 0x1A30 ; 0x1A30\r
125 190A A7 06    AIS #6\r
126 190C C7 18 00 STA 0x1800 ; <----------- WATCHDOG\r
127 190F 95       TSX\r
128 1910 6C 03    INC 3,X\r
129 1912 26 02    BNE *+4 ; 0x1916\r
130 1914 6C 02    INC 2,X\r
131 1916 9E FE 01 LDHX 1,SP\r
132 1919 9E F3 03 CPHX 3,SP\r
133 191C 22 BD    BHI *-65 ; 0x18DB\r
134 \r
135  if(acc==tested_num)\r
136   { result[res_pos++]=tested_num; }\r
137  }\r
138 }\r
139 \r
140 191E 9E F3 07 CPHX 7,SP\r
141 1921 26 1D    BNE *+31 ; 0x1940\r
142 1923 9E FE 05 LDHX 5,SP\r
143 1926 26 18    BNE *+26 ; 0x1940\r
144 1928 9E FE 09 LDHX 9,SP\r
145 192B 89       PSHX\r
146 192C AF 01    AIX #1\r
147 192E 9E FF 0A STHX 10,SP\r
148 1931 88       PULX\r
149 1932 58       LSLX\r
150 1933 9E E6 02 LDA 2,SP\r
151 1936 8C       CLRH\r
152 1937 D7 01 01 STA 257,X\r
153 193A 9E E6 01 LDA 1,SP\r
154 193D D7 01 00 STA 256,X\r
155 1940 95       TSX\r
156 1941 6C 01    INC 1,X\r
157 1943 26 01    BNE *+3 ; 0x1946\r
158 1945 7C       INC ,X\r
159 1946 9E FE 01 LDHX 1,SP\r
160 1949 65 00 01 CPHX #0x0001 <----------------- END_NUM\r
161 194C 25 86    BCS *-120 ; 0x18D4\r
162 194E A7 0A    AIS #10\r
163 1950 81       RTS <------------- USCITA MAIN\r
164 \r
165 1951 5F       CLRX\r
166 1952 8C       CLRH\r
167 1953 9E FF 09 STHX 9,SP\r
168 1956 8C       CLRH\r
169 1957 9E FF 07 STHX 7,SP\r
170 195A 5C       INCX\r
171 195B 81       RTS <----------- FINE MAIN\r
172 \r
173 static void _PUSH_ARGS_L(void) { ... }\r
174 195C E6 03    LDA 3,X\r
175 195E 87       PSHA\r
176 195F E6 02    LDA 2,X\r
177 1961 87       PSHA\r
178 1962 9E AE    LDHX ,X\r
179 1964 89       PSHX\r
180 1965 8B       PSHH\r
181 1966 9E FE 07 LDHX 7,SP\r
182 1969 E6 03    LDA 3,X\r
183 196B 9E E7 11 STA 17,SP\r
184 196E E6 02    LDA 2,X\r
185 1970 9E E7 10 STA 16,SP\r
186 1973 9E AE    LDHX ,X\r
187 1975 9E FF 0E STHX 14,SP\r
188 1978 9E FE 05 LDHX 5,SP\r
189 197B FC       JMP ,X\r
190 \r
191 static void _ENTER_BINARY_L(void) { ... }\r
192 197C 87       PSHA\r
193 197D 89       PSHX\r
194 197E 8B       PSHH\r
195 197F 89       PSHX\r
196 1980 8B       PSHH\r
197 1981 9E FE 06 LDHX 6,SP\r
198 1984 89       PSHX\r
199 1985 8B       PSHH\r
200 1986 9E FE 0A LDHX 10,SP\r
201 1989 9E FF 08 STHX 8,SP\r
202 198C 9E FE 0C LDHX 12,SP\r
203 198F CC 19 5C JMP 0x195C\r
204 \r
205 static void _IDIVMOD (char dummy_sgn, int j, int dummy, int i, ...) { ... }\r
206 1992 9E 6D 04 TST 4,SP\r
207 1995 26 1A    BNE *+28 ; 0x19B1\r
208 1997 95       TSX\r
209 1998 E6 07    LDA 7,X\r
210 199A EE 04    LDX 4,X\r
211 199C 8C       CLRH\r
212 199D 52       DIV\r
213 199E 9E E7 04 STA 4,SP\r
214 19A1 9E E6 09 LDA 9,SP\r
215 19A4 52       DIV\r
216 19A5 9E E7 05 STA 5,SP\r
217 19A8 9E 6F 08 CLR 8,SP\r
218 19AB 8B       PSHH\r
219 19AC 86       PULA\r
220 19AD 9E E7 09 STA 9,SP\r
221 19B0 81       RTS\r
222 19B1 4F       CLRA\r
223 19B2 87       PSHA\r
224 19B3 AE 08    LDX #0x08\r
225 19B5 98       CLC\r
226 19B6 9E 69 0A ROL 10,SP\r
227 19B9 9E 69 09 ROL 9,SP\r
228 19BC 9E 69 01 ROL 1,SP\r
229 19BF 9E E6 05 LDA 5,SP\r
230 19C2 9E E1 01 CMP 1,SP\r
231 19C5 22 1D    BHI *+31 ; 0x19E4\r
232 19C7 26 08    BNE *+10 ; 0x19D1\r
233 19C9 9E E6 0E LDA 6,SP\r
234 19CC 9E E1 09 CMP 9,SP\r
235 19CF 22 13    BHI *+21 ; 0x19E4\r
236 19D1 9E E6 09 LDA 9,SP\r
237 19D4 9E E0 06 SUB 6,SP\r
238 19D7 9E E7 09 STA 9,SP\r
239 19DA 9E E6 01 LDA 1,SP\r
240 19DD 9E E2 05 SBC 5,SP\r
241 19E0 9E E7 01 STA 1,SP\r
242 19E3 99       SEC\r
243 19E4 5B D0    DBNZX *-46 ; 0x19B6\r
244 19E6 9E E6 0A LDA 10,SP\r
245 19E9 49       ROLA\r
246 19EA 9E E7 06 STA 6,SP\r
247 19ED 9E E6 09 LDA 9,SP\r
248 19F0 9E E7 0A STA 10,SP\r
249 19F3 86       PULA\r
250 19F4 9E E7 08 STA 8,SP\r
251 19F7 9E 6F 04 CLR 4,SP\r
252 19FA 81       RTS\r
253 \r
254 static void _LADD_k_is_k_plus_j(_PARAM_BINARY_L) { ... }\r
255 19FB 95       TSX\r
256 19FC E6 12    LDA 18,X\r
257 19FE EB 05    ADD 5,X\r
258 1A00 E7 12    STA 18,X\r
259 1A02 E6 11    LDA 17,X\r
260 1A04 E9 04    ADC 4,X\r
261 1A06 E7 11    STA 17,X\r
262 1A08 E6 10    LDA 16,X\r
263 1A0A E9 03    ADC 3,X\r
264 1A0C E7 10    STA 16,X\r
265 1A0E E6 0F    LDA 15,X\r
266 1A10 E9 02    ADC 2,X\r
267 1A12 E7 0F    STA 15,X\r
268 1A14 A7 0A    AIS #10\r
269 1A16 8A       PULH\r
270 1A17 88       PULX\r
271 1A18 86       PULA\r
272 1A19 81       RTS\r
273 \r
274 void _IMODU_STAR08(int i, ...) { ... }\r
275 1A1A A7 FE    AIS #-2\r
276 1A1C 9E FF 01 STHX 1,SP\r
277 1A1F 87       PSHA\r
278 1A20 CD 19 92 JSR 0x1992 ; 0x1992\r
279 1A23 86       PULA\r
280 1A24 A7 02    AIS #2\r
281 1A26 9E FE 03 LDHX 3,SP\r
282 1A29 81       RTS\r
283 \r
284 void _LADD(void) { ... }\r
285 1A2A CD 19 7C JSR 0x197C ; 0x197C\r
286 1A2D CD 19 FB JSR 0x19FB ; 0x19FB\r
287 \r
288 void _POP32(void) { ... }\r
289 1A30 87       PSHA\r
290 1A31 9E E6 04 LDA 4,SP\r
291 1A34 F7       STA ,X\r
292 1A35 9E E6 05 LDA 5,SP\r
293 1A38 E7 01    STA 1,X\r
294 1A3A 9E E6 06 LDA 6,SP\r
295 1A3D E7 02    STA 2,X\r
296 1A3F 9E E6 07 LDA 7,SP\r
297 1A42 E7 03    STA 3,X\r
298 1A44 86       PULA\r
299 1A45 8A       PULH\r
300 1A46 88       PULX\r
301 1A47 A7 04    AIS #4\r
302 1A49 FC       JMP ,X