-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProgram2.txt
More file actions
383 lines (383 loc) · 11.4 KB
/
Copy pathProgram2.txt
File metadata and controls
383 lines (383 loc) · 11.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
001 000006 # N_SENT = 6
002 000500 # PAR_BASE = 0o500
003 000700 # WORD_BUF = 0o700
004 000040 # SPACE_CH = ' '
005 000056 # DOT_CH = '.'
006 000000 # ZERO = 0
010 000000 # PTR_PARA
011 000000 # PTR_WORD
012 000000 # WORD_LEN
013 000000 # SENT_NO
014 000000 # WORD_NO
015 000000 # FOUND
016 000000 # MATCH_SENT_NO
017 000000 # MATCH_WORD_NO
020 000000 # TMP_CHAR
021 000000 # TMP_R1
022 000000 # TMP_PARA
023 000000 # TMP_WORD
024 000001 # LAST_DELIM (1=at boundary,0=inside word)
025 000000 # ADDR_PRINT_LOOP
025 000112 # ADDR_PRINT_LOOP = 112
026 000000 # ADDR_DONE_PRINT
026 000121 # ADDR_DONE_PRINT = 121
027 000000 # ADDR_READ_LOOP
027 000125 # ADDR_READ_LOOP = 125
030 000000 # ADDR_DONE_READ
030 000137 # ADDR_DONE_READ = 137
031 000000 # ADDR_SEARCH_LOOP
031 000154 # ADDR_SEARCH_LOOP = 154
032 000000 # ADDR_MATCH_FOUND
032 000246 # ADDR_MATCH_FOUND = 246
033 000000 # ADDR_SEARCH_DONE
033 000377 # ADDR_SEARCH_DONE = 377
034 000000 # ADDR_MATCH_LOOP
034 000200 # ADDR_MATCH_LOOP = 200
035 000000 # ADDR_DOT_HANDLER
035 000233 # ADDR_DOT_HANDLER = 233
036 000000 # ADDR_MISMATCH
036 000220 # ADDR_MISMATCH = 220
037 000000 # ADDR_SPACE_HANDLER
037 000224 # ADDR_SPACE_HANDLER = 224
100 002002 # LDR R0,PAR_BASE
101 004010 # STR R0,PTR_PARA
102 002006 # LDR R0,ZERO
103 014001 # AIR R0,1 ; SENT_NO=1
104 004013 # STR R0,SENT_NO
105 002006 # LDR R0,ZERO
106 004014 # STR R0,WORD_NO
107 004015 # STR R0,FOUND
110 014001 # AIR R0,1 ; LAST_DELIM=1
111 004024 # STR R0,LAST_DELIM
112 002050 # LDR R0,(PTR_PARA) ; char
113 024066 # JZ R0,@ADDR_DONE_PRINT
114 174002 # OUT R0,2 ; print ASCII char
115 002410 # LDR R1,PTR_PARA
116 014401 # AIR R1,1 ; PTR_PARA++
117 004410 # STR R1,PTR_PARA
120 032065 # JMA @ADDR_PRINT_LOOP
121 002003 # LDR R0,WORD_BUF
122 004011 # STR R0,PTR_WORD
123 002006 # LDR R0,ZERO
124 004012 # STR R0,WORD_LEN
125 172003 # IN R0,3 ; read ASCII char
126 024070 # JZ R0,@ADDR_DONE_READ
127 004051 # STR R0,(PTR_WORD)
130 002411 # LDR R1,PTR_WORD
131 014401 # AIR R1,1 ; PTR_WORD++
132 004411 # STR R1,PTR_WORD
133 002012 # LDR R0,WORD_LEN
134 014001 # AIR R0,1 ; WORD_LEN++
135 004012 # STR R0,WORD_LEN
136 032067 # JMA @ADDR_READ_LOOP
137 002411 # LDR R1,PTR_WORD
140 002006 # LDR R0,ZERO
141 004051 # STR R0,(PTR_WORD) ; word terminator
142 002002 # LDR R0,PAR_BASE
143 004010 # STR R0,PTR_PARA
144 002006 # LDR R0,ZERO
145 014001 # AIR R0,1 ; SENT_NO=1
146 004013 # STR R0,SENT_NO
147 002006 # LDR R0,ZERO
150 004014 # STR R0,WORD_NO
151 004015 # STR R0,FOUND
152 014001 # AIR R0,1 ; LAST_DELIM=1
153 004024 # STR R0,LAST_DELIM
154 002050 # LDR R0,(PTR_PARA) ; char
155 024073 # JZ R0,@ADDR_SEARCH_DONE
156 004020 # STR R0,TMP_CHAR
157 002404 # LDR R1,SPACE_CH
160 012420 # SMR R1,TMP_CHAR ; R1 = ' ' - ch
161 024477 # JZ R1,@ADDR_SPACE_HANDLER ; space
162 002405 # LDR R1,DOT_CH
163 012420 # SMR R1,TMP_CHAR ; R1 = '.' - ch
164 024475 # JZ R1,@ADDR_DOT_HANDLER ; '.' sentence boundary
165 002024 # LDR R0,LAST_DELIM
166 024076 # JZ R0,@ADDR_MISMATCH ; if 0, inside word -> no new word
167 003014 # LDR R2,WORD_NO
170 015001 # AIR R2,1 ; WORD_NO++
171 005014 # STR R2,WORD_NO
172 002006 # LDR R0,ZERO
173 004024 # STR R0,LAST_DELIM
174 002410 # LDR R1,PTR_PARA
175 004422 # STR R1,TMP_PARA
176 002403 # LDR R1,WORD_BUF
177 004423 # STR R1,TMP_WORD
200 002062 # LDR R0,(TMP_PARA) ; ch_p
201 002463 # LDR R1,(TMP_WORD) ; ch_w
202 024472 # JZ R1,@ADDR_MATCH_FOUND ; full match
203 024073 # JZ R0,@ADDR_SEARCH_DONE ; paragraph ended
204 004020 # STR R0,TMP_CHAR ; save ch_p
205 004421 # STR R1,TMP_R1 ; save ch_w
206 003020 # LDR R2,TMP_CHAR ; R2 = ch_p
207 013021 # SMR R2,TMP_R1 ; R2 = ch_p - ch_w
210 027076 # JNE R2,@ADDR_MISMATCH ; chars differ
211 003422 # LDR R3,TMP_PARA
212 015401 # AIR R3,1 ; TMP_PARA++
213 005422 # STR R3,TMP_PARA
214 003423 # LDR R3,TMP_WORD
215 015401 # AIR R3,1 ; TMP_WORD++
216 005423 # STR R3,TMP_WORD
217 032074 # JMA @ADDR_MATCH_LOOP ; continue matching
220 002410 # MIS: LDR R1,PTR_PARA
221 014401 # MIS: AIR R1,1 ; PTR_PARA++
222 004410 # MIS: STR R1,PTR_PARA
223 032071 # MIS: JMA @ADDR_SEARCH_LOOP ; continue
224 002006 # SPACE: LDR R0,ZERO
225 014001 # SPACE: AIR R0,1 ; LAST_DELIM=1
226 004024 # SPACE: STR R0,LAST_DELIM
227 002410 # SPACE: LDR R1,PTR_PARA
230 014401 # SPACE: AIR R1,1 ; PTR_PARA++
231 004410 # SPACE: STR R1,PTR_PARA
232 032071 # SPACE: JMA @ADDR_SEARCH_LOOP
233 002013 # DOT: LDR R0,SENT_NO
234 014001 # DOT: AIR R0,1 ; SENT_NO++
235 004013 # DOT: STR R0,SENT_NO
236 002006 # DOT: LDR R0,ZERO
237 004014 # DOT: STR R0,WORD_NO
240 014001 # DOT: AIR R0,1 ; LAST_DELIM=1
241 004024 # DOT: STR R0,LAST_DELIM
242 002410 # DOT: LDR R1,PTR_PARA
243 014401 # DOT: AIR R1,1 ; PTR_PARA++
244 004410 # DOT: STR R1,PTR_PARA
245 032071 # DOT: JMA @ADDR_SEARCH_LOOP
246 002006 # MF: LDR R0,ZERO
247 014001 # MF: AIR R0,1 ; FOUND=1
250 004015 # MF: STR R0,FOUND
251 002013 # MF: LDR R0,SENT_NO
252 004016 # MF: STR R0,MATCH_SENT_NO
253 002014 # MF: LDR R0,WORD_NO
254 004017 # MF: STR R0,MATCH_WORD_NO
255 002006 # MF: LDR R0,ZERO
256 014106 # MF: AIR R0,'F'
257 174002 # MF: OUT R0,2
260 002006 # MF: LDR R0,ZERO
261 014117 # MF: AIR R0,'O'
262 174002 # MF: OUT R0,2
263 002006 # MF: LDR R0,ZERO
264 014125 # MF: AIR R0,'U'
265 174002 # MF: OUT R0,2
266 002006 # MF: LDR R0,ZERO
267 014116 # MF: AIR R0,'N'
270 174002 # MF: OUT R0,2
271 002006 # MF: LDR R0,ZERO
272 014104 # MF: AIR R0,'D'
273 174002 # MF: OUT R0,2
274 002006 # MF: LDR R0,ZERO
275 014040 # MF: AIR R0,' '
276 174002 # MF: OUT R0,2
277 002006 # MF: LDR R0,ZERO
300 014101 # MF: AIR R0,'A'
301 174002 # MF: OUT R0,2
302 002006 # MF: LDR R0,ZERO
303 014124 # MF: AIR R0,'T'
304 174002 # MF: OUT R0,2
305 002006 # MF: LDR R0,ZERO
306 014040 # MF: AIR R0,' '
307 174002 # MF: OUT R0,2
310 002006 # MF: LDR R0,ZERO
311 014123 # MF: AIR R0,'S'
312 174002 # MF: OUT R0,2
313 002006 # MF: LDR R0,ZERO
314 014105 # MF: AIR R0,'E'
315 174002 # MF: OUT R0,2
316 002006 # MF: LDR R0,ZERO
317 014116 # MF: AIR R0,'N'
320 174002 # MF: OUT R0,2
321 002006 # MF: LDR R0,ZERO
322 014124 # MF: AIR R0,'T'
323 174002 # MF: OUT R0,2
324 002006 # MF: LDR R0,ZERO
325 014105 # MF: AIR R0,'E'
326 174002 # MF: OUT R0,2
327 002006 # MF: LDR R0,ZERO
330 014116 # MF: AIR R0,'N'
331 174002 # MF: OUT R0,2
332 002006 # MF: LDR R0,ZERO
333 014103 # MF: AIR R0,'C'
334 174002 # MF: OUT R0,2
335 002006 # MF: LDR R0,ZERO
336 014105 # MF: AIR R0,'E'
337 174002 # MF: OUT R0,2
340 002006 # MF: LDR R0,ZERO
341 014040 # MF: AIR R0,' '
342 174002 # MF: OUT R0,2
343 002013 # MF: LDR R0,SENT_NO
344 014060 # MF: AIR R0,'0' ; to ASCII
345 174002 # MF: OUT SENT_NO
346 002006 # MF: LDR R0,ZERO
347 014040 # MF: AIR R0,' '
350 174002 # MF: OUT R0,2
351 002006 # MF: LDR R0,ZERO
352 014127 # MF: AIR R0,'W'
353 174002 # MF: OUT R0,2
354 002006 # MF: LDR R0,ZERO
355 014117 # MF: AIR R0,'O'
356 174002 # MF: OUT R0,2
357 002006 # MF: LDR R0,ZERO
360 014122 # MF: AIR R0,'R'
361 174002 # MF: OUT R0,2
362 002006 # MF: LDR R0,ZERO
363 014104 # MF: AIR R0,'D'
364 174002 # MF: OUT R0,2
365 002006 # MF: LDR R0,ZERO
366 014040 # MF: AIR R0,' '
367 174002 # MF: OUT R0,2
370 002014 # MF: LDR R0,WORD_NO
371 014060 # MF: AIR R0,'0' ; to ASCII
372 174002 # MF: OUT WORD_NO
373 002006 # MF: LDR R0,ZERO
374 014012 # MF: AIR R0,'\n'
375 174002 # MF: OUT newline
376 000000 # HLT ; MATCH_FOUND done
377 000000 # HLT ; SEARCH_DONE (no match)
500 000115 # PAR 'M'
501 000131 # PAR 'Y'
502 000040 # PAR ' '
503 000116 # PAR 'N'
504 000101 # PAR 'A'
505 000115 # PAR 'M'
506 000105 # PAR 'E'
507 000040 # PAR ' '
510 000111 # PAR 'I'
511 000123 # PAR 'S'
512 000040 # PAR ' '
513 000123 # PAR 'S'
514 000111 # PAR 'I'
515 000115 # PAR 'M'
516 000125 # PAR 'U'
517 000114 # PAR 'L'
520 000101 # PAR 'A'
521 000124 # PAR 'T'
522 000117 # PAR 'O'
523 000122 # PAR 'R'
524 000056 # PAR '.'
525 000040 # PAR ' '
526 000115 # PAR 'M'
527 000131 # PAR 'Y'
530 000040 # PAR ' '
531 000120 # PAR 'P'
532 000125 # PAR 'U'
533 000122 # PAR 'R'
534 000120 # PAR 'P'
535 000117 # PAR 'O'
536 000123 # PAR 'S'
537 000105 # PAR 'E'
540 000040 # PAR ' '
541 000111 # PAR 'I'
542 000123 # PAR 'S'
543 000040 # PAR ' '
544 000124 # PAR 'T'
545 000117 # PAR 'O'
546 000040 # PAR ' '
547 000123 # PAR 'S'
550 000111 # PAR 'I'
551 000115 # PAR 'M'
552 000125 # PAR 'U'
553 000114 # PAR 'L'
554 000101 # PAR 'A'
555 000124 # PAR 'T'
556 000105 # PAR 'E'
557 000040 # PAR ' '
560 000103 # PAR 'C'
561 000117 # PAR 'O'
562 000115 # PAR 'M'
563 000120 # PAR 'P'
564 000125 # PAR 'U'
565 000124 # PAR 'T'
566 000105 # PAR 'E'
567 000122 # PAR 'R'
570 000056 # PAR '.'
571 000040 # PAR ' '
572 000123 # PAR 'S'
573 000111 # PAR 'I'
574 000115 # PAR 'M'
575 000125 # PAR 'U'
576 000114 # PAR 'L'
577 000101 # PAR 'A'
600 000124 # PAR 'T'
601 000105 # PAR 'E'
602 000040 # PAR ' '
603 000111 # PAR 'I'
604 000040 # PAR ' '
605 000115 # PAR 'M'
606 000125 # PAR 'U'
607 000123 # PAR 'S'
610 000124 # PAR 'T'
611 000056 # PAR '.'
612 000040 # PAR ' '
613 000106 # PAR 'F'
614 000117 # PAR 'O'
615 000122 # PAR 'R'
616 000040 # PAR ' '
617 000111 # PAR 'I'
620 000124 # PAR 'T'
621 000040 # PAR ' '
622 000111 # PAR 'I'
623 000123 # PAR 'S'
624 000040 # PAR ' '
625 000120 # PAR 'P'
626 000125 # PAR 'U'
627 000122 # PAR 'R'
630 000120 # PAR 'P'
631 000117 # PAR 'O'
632 000123 # PAR 'S'
633 000105 # PAR 'E'
634 000040 # PAR ' '
635 000117 # PAR 'O'
636 000106 # PAR 'F'
637 000040 # PAR ' '
640 000115 # PAR 'M'
641 000111 # PAR 'I'
642 000116 # PAR 'N'
643 000105 # PAR 'E'
644 000056 # PAR '.'
645 000040 # PAR ' '
646 000116 # PAR 'N'
647 000117 # PAR 'O'
650 000124 # PAR 'T'
651 000040 # PAR ' '
652 000101 # PAR 'A'
653 000040 # PAR ' '
654 000115 # PAR 'M'
655 000101 # PAR 'A'
656 000124 # PAR 'T'
657 000122 # PAR 'R'
660 000111 # PAR 'I'
661 000130 # PAR 'X'
662 000040 # PAR ' '
663 000123 # PAR 'S'
664 000111 # PAR 'I'
665 000115 # PAR 'M'
666 000125 # PAR 'U'
667 000114 # PAR 'L'
670 000101 # PAR 'A'
671 000124 # PAR 'T'
672 000117 # PAR 'O'
673 000122 # PAR 'R'
674 000056 # PAR '.'
675 000040 # PAR ' '
676 000102 # PAR 'B'
677 000125 # PAR 'U'
700 000124 # PAR 'T'
701 000040 # PAR ' '
702 000103 # PAR 'C'
703 000117 # PAR 'O'
704 000115 # PAR 'M'
705 000120 # PAR 'P'
706 000125 # PAR 'U'
707 000124 # PAR 'T'
710 000117 # PAR 'O'
711 000122 # PAR 'R'
712 000040 # PAR ' '
713 000123 # PAR 'S'
714 000111 # PAR 'I'
715 000115 # PAR 'M'
716 000125 # PAR 'U'
717 000114 # PAR 'L'
720 000101 # PAR 'A'
721 000124 # PAR 'T'
722 000117 # PAR 'O'
723 000122 # PAR 'R'
724 000056 # PAR '.'
725 000000 # PAR_END (0 terminator)