
- •Введение:
- •Задание на курсовую работу:
- •Постановка задачи:
- •Структура входных и выходных данных:
- •Описание структуры входной и выходной информации:
- •Разработка и описание алгоритма:
- •Разработка и описание принципиальной схемы алгоритма:
- •252 In port с1(4-7); ввод с порта c1(4-7)
- •253 Ani 112; выделить 5-й, 6-й и 7-й биты
- •263 Mvi m, 0; поместить 0 в nproc
- •301 Ani 63; выделить 6 младших битов
- •306 In port a1
- •307 Ani 31; выделить 5 младших битов
- •465 Inx hl; переход к сост-ю персонажа
- •35 Ldax hl; звание I-го персонажа в a
- •281 Dcr m; уменьш. Старш. Байт ct1
- •Пример работы алгоритма:
- •Разработка и описание структурной схемы мпс:
- •Разработка и описание функциональной схемы мпс:
- •Заключение:
281 Dcr m; уменьш. Старш. Байт ct1
282 LDA ОЗУ + 15
283
284
285 CPI 0; если DIR = 0, то
286
287 JNZ ITERATION + 298
288
289
ITERATION + 290 LDA ОЗУ + 10; находится ли счётчик
291
292
293 CPI ОЗУ + 87; за последним персонажем?
294
295 JNZ ITERATION + 30;вернуться в начало цикла
296
297
298 LDA ОЗУ + 10; находится ли счётчик
299
ITERATION + 300
301 CPI ОЗУ + 72; перед первым персонажем?
302
303 JNZ ITERATION + 30;вернуться в начало цикла
304
305
306 NOP
307 NOP
308 NOP
309 NOP
ITERATION + 310 NOP
311 NOP
312 NOP
313 NOP
314 LHLD ОЗУ + 11; СТ2++
315
316
317 INX HL
318 SHLD ОЗУ + 11
319
ITERATION + 320
321 LDA ОЗУ + 12; младш. байт СТ2 в аккум.
322
323
324 CPI 3; CT2 = 3?
325
326 JNZ ITERATION + 9;переход к след. абзацу
327
328
329 RET
Принципиальная схема программного модуля ITERATION (в действительных адресах):
02EC,02ED,02EE LXI HL, 0000; в HL загр. 0
02EF,02F0,02F1 SHLD 000B; CT2 = 0
02F2,02F3,02F4 LDA 000F; загр. в аккум. знач-е DIR
02F5 CMA; DIR = !DIR
02F6,02F7,02F8 STA 000F
02F9,02FA CPI 00; DIR = 0?
02FB,02FC,02FD JNZ 0307;
02FE,02FF,0300 LXI HL, 004B; адр. 1-го персонажа
0301,0302,0303 JMP 030A
0304,0305,0306 LXI HL, 0053; адр. последнего персонажа
0307,0308,0309 SHLD 0009; сохр. в CT1 адр. персонажа
030A,030B,030C LHLD 0009;
030D INX HL
030E INX HL
030F LDAX HL; звание i-го персонажа в A
0310,0311,0312 STA 0010; оттуда - в RES
0313,0314,0315 LHLD 0009
0316,0317,0318 SHLD 0034; адр. i-го персонажа в OBJ
0319,031A,031B SHLD 0036; и в SUB
031C,031D,031E LDA 0039; загр. знач-е NPROC
031F,0320 CPI 00; NPROC = 0?
0321,0322,0323 JNZ 034F; к следующей проверке
0324,0325,0326 LDA 0011; младш. байт RES
0327,0328 CPI 01
0329,032A,032B CZ 0C00; вызов REACT11
032C,032D,032E LDA 0011
032F,0330 CPI 02
0331,0332,0333 CZ 1000; вызов REACT12
0334,0335,0336 LDA 0011
0337,0338 CPI 03
0339,033A,033B CZ 1400; и т. д.
033C,033D,033E LDA 0011
033F,0340 CPI 04
0341,0342,0343 CZ 1800
0344,0345,0346 LDA 0011
0347,0348 CPI 05
0349,034A,034B CZ 1C00
034C,034D,034E JMP 03E5; выход из блока проверок
034F,0350,0351 LDA 0039
0352,0353 CPI 01; NPROC = 1?
0354,0355,0356 JNZ 0382
0357,0358,0359 LDA 0011
035A,035B CPI 01
035C,035D,035E CZ 2000; вызов REACT21
035F,0360,0361 LDA 0011
0362,0363 CPI 02
0364,0365,0366 CZ 2400; и т. д.
0367,0368,0369 LDA 0011
036A,036B CPI 03
036C,036D,036E CZ 2800
036F,0370,0371 LDA 0011
0372,0373 CPI 04
0374,0375,0376 CZ 2C00
0377,0378,0379 LDA 0011
037A,037B CPI 05
037C,037D,037E CZ 2000
037F,0380,0381 JMP 03E5
0382,0383,0384 LDA 0039
0385,0386 CPI 02; NPROC = 2?
0387,0388,0389 JNZ 03B5
038A,038B,038C LDA 0011
038D,038E CPI 01
038F,0390,0391 CZ 3400
0392,0393,0394 LDA 0011
0395,0396 CPI 02
0397,0398,0399 CZ 3800
039A,039B,039C LDA 0011
039D,039E CPI 03
039F,03A0,03A1 CZ 3C00
03A2,03A3,03A4 LDA 0011
03A5,03A6 CPI 04
03A7,03A8,03A9 CZ 4000
03AA,03AB,03AC LDA 0011
03AD,03AE CPI 05
03AF,03B0,03B1 CZ 4400
03B2,03B3,03B4 JMP 03E5
03B5,03B6,03B7 LDA 0039
03B8,03B9 CPI 03; NPROC = 3?
03BA,03BB,03BC JNZ 03E5
03BD,03BE,03BF LDA 0011
03C0,03C1 CPI 01
03C2,03C3,03C4 CZ 4800
03C5,03C6,03C7 LDA 0011
03C8,03C9 CPI 02
03CA,03CB,03CC CZ 4C00
03CD,03CE,03CF LDA 0011
03D0,03D1 CPI 03
03D2,03D3,03D4 CZ 5000
03D5,03D6,03D7 LDA 0011
03D8,03D9 CPI 04
03DA,03DB,03DC CZ 5400
03DD,03DE,03DF LDA 0011
03E0,03E1 CPI 05
03E2,03E3,03E4 CZ 5800
03E5,03E6,03E7 LDA 000F
03E8,03E9 CPI 00; DIR = 0?
03EA,03EB,03EC JNZ 03F7;
03ED,03EE,03EF LHLD 0009;
03F0,03F1,03F2 LXI BC, 0004
03F3 DAD BC; HL = HL + 4
03F4,03F5,03F6 SHLD 0009
03F7,03F8,03F9 LDA 000A; младший байт счётчика
03FA,03FB SBI 04; вычесть из него 4
03FC,03FD,03FE STA 000А
03FF,0400,0401 JNC 0406
0402,0403,0404 LXI HL, 0009
0405 DCR M; уменьш. старш. байт CT1
0406,0407,0408 LDA 000F
0409,040A CPI 00; если DIR = 0, то
040B,040C,040D JNZ 0416
040E,040F,0410 LDA 000A; находится ли счётчик
0411,0412 CPI 57; за последним персонажем?
0413,0414,0415 JNZ 030A; вернуться в начало цикла
0416,0417,0418 LDA 000А; находится ли счётчик
0419,041A CPI 48; перед первым персонажем?
041B,041C,041D JNZ 030A; вернуться в начало цикла
041E NOP
041F NOP
0420 NOP
0421 NOP
0422 NOP
0423 NOP
0424 NOP
0425 NOP
0426,0427,0428 LHLD 000B; СТ2++
0429 INX HL
042A,042B,042C SHLD 000B
042D,042E,042F LDA 000C; младш. байт СТ2 в аккум.
0430,0431 CPI 03; CT2 = 3?
0432,0433,0434 JNZ 02F2; переход к след. абзацу
0435 RET