- •Введение:
- •Задание на курсовую работу:
- •Постановка задачи:
- •Структура входных и выходных данных:
- •Описание структуры входной и выходной информации:
- •Разработка и описание алгоритма:
- •Разработка и описание принципиальной схемы алгоритма:
- •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
- •Пример работы алгоритма:
- •Разработка и описание структурной схемы мпс:
- •Разработка и описание функциональной схемы мпс:
- •Заключение:
465 Inx hl; переход к сост-ю персонажа
466 MVI M,0; сост-е i-го персонажа = 0
467
468 SHLD ОЗУ + 9
469
INIT + 470
471 JMP INIT + 550; выход из блока проверок
472
473
474 CPI 2; А = 2?
475
476 JNZ INIT + 493
477
478
479 LHLD ОЗУ + 9
INIT + 480
481
482 MVI M, 2
483
484 INX HL
485 MVI M, 0
486
487 SHLD ОЗУ + 9
488
489
INIT + 490 JMP INIT + 550
491
492
493 CPI 3; А = 3?
494
495 JNZ INIT + 512
496
497
498 LHLD ОЗУ + 9
499
INIT + 500
501 MVI M, 3
502
503 INX HL
504 MVI M, 0
505
506 SHLD ОЗУ + 9
507
508
509 JMP INIT + 550
INIT + 510
511
512 CPI 4; А = 4?
513
514 JNZ INIT + 531
515
516
517 LHLD ОЗУ + 9
518
519
INIT + 520 MVI M, 4
521
522 INX HL
523 MVI M, 0
524
525 SHLD ОЗУ + 9
526
527
528 JMP INIT + 550
529
INIT + 530
531 CPI 5; А = 5?
532
533 JNZ INIT + 550
534
535
536 LHLD ОЗУ+ 9
537
538
539 MVI M, 5
INIT + 540
541 INX HL
542 MVI M, 0
543
544 SHLD ОЗУ + 9
545
546
547 JMP INIT + 550
548
549
INIT + 550 LHLD ОЗУ + 9
551
552
553 INX HL; CT1++
554 SHLD ОЗУ + 9
555
556
557 LDA ОЗУ + 10; младш. байт CT1 в аккум.
558
559
INIT + 560 CPI ОЗУ + 87; за последним персонажем?
561
562 JNZ INIT + 312; возврат в начало цикла
563
564
565 NOP
566 NOP
567 NOP
568 NOP
569 NOP
INIT + 570 NOP
571 NOP
572 NOP
573 RET
Принципиальная схема программного модуля INIT (в действительных адресах):
0013,0014,0015 LXI HL, 0000; содержимое HL = 0
0016,0017,0018 SHLD 0059; BP = 0
0019 IN port C1(0-3); ввод с порта С1(0-3)
001A,001B CPI 08; А = 00001000?
001C,001D,001E JNZ 0058; к следующей проверке
001F,0020,0021 LXI HL, 602C; А(завязка1)
0022,0023,0024 SHLD 0057; сохр. адр. завязки1 в ENV
0025,0026,0027 LXI HL, 5DD3; А(предмет11)
0028,0029,002A SHLD 003A; сохр. адр. предмета11 в ITM1
002B,002C,002D LXI HL, 5DD9; А(предмет12)
002E,002F,0030 SHLD 003C; сохр. адр. предмета12 в ITM2
0031,0032,0033 LXI HL, 5DDF; А(предмет13)
0034,0035,0036 SHLD 003E; и т. д.
0037,0038,0039 LXI HL, 5DE9; А(предмет14)
003A,003B,003C SHLD 0040
003D,003E,003F LXI HL, 5E04; А(предмет15)
0040,0041,0042 SHLD 0042
0043,0044,0045 LXI HL, 5E14; А(предмет16)
0046,0047,0048 SHLD 0044
0049,004A,004B LXI HL, 5E21; А(предмет17)
004C,004D,004E SHLD 0046
004F,0050,0051 LXI HL, 5E2C; А(предмет18)
0052,0053,0054 SHLD 0048
0055,0056,0057 JMP 0110; выход из блока проверок
0058,0059 CPI 04; А = 00000100?
005A,005B,005C JNZ 0096
005D,005E,005F LXI HL, 618B; А(завязка2)
0060,0061,0062 SHLD 0057
0063,0064,0065 LXI HL, 5E76; А(предмет21)
0066,0067,0068 SHLD 003A
0069,006A,006B LXI HL, 5E7D; А(предмет22)
006C,006D,006E SHLD 003C
006F,0070,0071 LXI HL, 5E82; А(предмет23)
0072,0073,0074 SHLD 003E
0075,0076,0077 LXI HL, 5E88; А(предмет24)
0078,0079,007A SHLD 0040
007B,007C,007D LXI HL, 5E90; А(предмет25)
007E,007F,0080 SHLD 0042
0081,0082,0083 LXI HL, 5EA0; А(предмет26)
0084,0085,0086 SHLD 0044
0087,0088,0089 LXI HL, 5EB0; А(предмет27)
008A,008B,008C SHLD 0046
008D,008E,008F LXI HL, 5EB8; А(предмет28)
0090,0091,0092 SHLD 0048
0093,0094,0095 JMP 0110
0096,0097 CPI 02; А = 00000010?
0098,0099,009A JNZ 004D
009B,009C,009D LXI HL, 627C; А(завязка3)
009E,009F,00A0 SHLD 0057
00A1,00A2,00A3 LXI HL, 5F05; А(предмет31)
00A4,00A5,00A6 SHLD 003A
00A7,00A8,00A9 LXI HL, 5F0A; А(предмет32)
00AA,00AB,00AC SHLD 003C
00AD,00AE,00AF LXI HL, 5F0F; А(предмет33)
00B0,00B1,00B2 SHLD 003E
00B3,00B4,00B5 LXI HL, 5F16; А(предмет34)
00B6,00B7,00B8 SHLD 0040
00B9,00BA,00BB LXI HL, 5F1C; А(предмет35)
00BC,00BD,00BE SHLD 0042
00BF,00C0,00C1 LXI HL, 5F2A; А(предмет36)
00C2,00C3,00C4 SHLD 0044
00C5,00C6,00C7 LXI HL, 5F35; А(предмет37)
00C8,00C9,00CA SHLD 0046
00CB,00CC,00CD LXI HL, 5F44; А(предмет38)
00CE,00CF,00D0 SHLD 0048
00D1,00D2,00D3 JMP 0110
00D4,00D5 CPI 01; А = 00000001?
00D6,00D7,00D8 JNZ 0110
00D9,00DA,00DB LXI HL, 6394; А(завязка4)
00DC,00DD,00DE SHLD 0057
00DF,00E0,00E1 LXI HL, 5FB0; А(предмет41)
00E2,00E3,00E4 SHLD 003A
00E5,00E6,00E7 LXI HL, 5FB5; А(предмет42)
00E8,00E9,00EA SHLD 003C
00EB,00EC,00ED LXI HL, 5FBB; А(предмет43)
00EE,00EF,00F0 SHLD 003E
00F1,00F2,00F3 LXI HL, 5FC2; А(предмет44)
00F4,00F5,00F6 SHLD 0040
00F7,00F8,00F9 LXI HL, 5FDD; А(предмет45)
00FA,00FB,00FC SHLD 0042
00FD,00FE,00FF LXI HL, 5FEC; А(предмет46)
0100,0101,0102 SHLD 0044
0103,0104,0105 LXI HL, 5FF6; А(предмет47)
0106,0107,0108 SHLD 0046
0109,010A,010B LXI HL, 6005; А(предмет48)
010C,010E,010F SHLD 0048
0110 IN port С1(4-7); ввод с порта C1(4-7)
0111,0112 ANI 70; выделить 5-й, 6-й и 7-й биты
0113,0114,0115 LXI HL, 0039; адр. переменной NPROC
0116,0117 CPI 40; А = 01000000?
0118,0119,011A JNZ 0120; к следующей проверке
011B,011C MVI M, 00; поместить 0 в NPROC
011D,011E,011F JMP 0131; выход из блока проверок
0120,0121 CPI 20; А = 00100000?
0122,0123,0124 JNZ 012A
0125,0126 MVI M, 01
0127,0128,0129 JMP 0131
012A,012B CPI 10; А = 00010000?
012C,012D,012E JNZ 0131
012F,0130 MVI M, 02
0131,0132,0133 LXI HL, 0000
0134,0135,0136 SHLD 000B; CT2 = 0;
0137,0138,0139 SHLD 000D; CT3 = 0;
013A,013B,013C LXI HL, 004B; адр. 1-го персонажа
013D,013E,013F SHLD 0009; CT1 на 1-го персонажа
0140 IN port B1
0141,0142 ANI 3F; выделить 6 младших битов
0143,0144,0145 STA 0010; сохр. аккум. в старшем байте RES
0146 IN port A1
0147,0148 ANI 1F; выделить 5 младших битов
0149,014A,014B STA 0013; сохр. в старшем байте TMP
014C,014D,014E LHLD 000B; загр. в HL знач-е CT2
014F INX HL; CT2++
0150,0151,0152 SHLD 000B
0153,0154,0155 LDA 0010; загр. в аккум. старш. байт RES
0156 RAR; >>RES>>
0157,0158,0159 STA 0010;
015A,015B,015C JNC 014C; в начало цикла
015D,015E,015F LDA 000C; загр. в аккум. младш. байт CT2
0160,0161 CPI 01; А = 1?
0162,0163,0164 JNZ 0170; к следующей проверке
0165,0166,0167 LHLD 0009; содержимое CT1 в HL
0168,0169 MVI M, 5D; A(старший байт адреса имени1)
016A INX HL; HL++
016B,016C MVI M, A4; A(младший байт адреса имени1)
016D,016E,016F JMP 01C0; выход из блока проверок
0170,0171 CPI 02; А = 2?
0172,0173,0174 JNZ 0180
0175,0176,0177 LHLD 0009
0178,0179 MVI M, 5D; A(старший байт адреса имени2)
017A INX HL; HL++
017B,017C MVI M, AC; A(младший байт адреса имени2)
017D,017E,017F JMP 01C0
0180,0181 CPI 03 А = 3?
0182,0183,0184 JNZ 0190
0185,0186,0187 LHLD 0009
0188,0189 MVI M, 5D; A(старший байт адреса имени3)
018A INX HL; HL++
018B,018C MVI M, B6; A(младший байт адреса имени3)
018D,018E,018F JMP 01C0
0190,0191 CPI 04 А = 4?
0192,0193,0194 JNZ 01A0
0195,0196,0197 LHLD 0009
0198,0199 MVI M, 5D; A(старший байт адреса имени4)
019A INX HL; HL++
019B,019C MVI M, BD; A(младший байт адреса имени4)
019D,019E,019F JMP 01C0
01A0,01A1 CPI 05; А = 5?
01A2,01A3,01A4 JNZ 01B0
01A5,01A6,01A7 LHLD 0009
01A8,01A9 MVI M, 5D; A(старший байт адреса имени5)
01AA INX HL; HL++
01AB,01AC MVI M, C2; A(младший байт адреса имени5)
01AD,01AE,01AF JMP 01C0
01B0,01B1 CPI 06; А = 6?
01B2,01B3,01B4 JNZ 01C0
01B5,01B6,01B7 LHLD 0009
01B8,01B9 MVI M, 5D; A(старший байт адреса имени6)
01BA INX HL; HL++
01BB,01BC MVI M, CC; A(младший байт адреса имени6)
01BD,01BE,01BF JMP 01C0
01C0,01C1,01C2 LHLD 0009
01C3 INX HL
01C4,01C5,01C6 SHLD 0009; CT1++
01C7,01C8,01C9 LHLD 000D; загр. в HL содержимое CT3
01CA INX HL
01CB,01CC,01CD SHLD 000D; CT3++
01CE,01CF,01D0 LDA 0013; старш. байт TMP в аккум.
01D1 RAR; >>TMP>>
01D2,01D3,01D4 STA 0013;
01D5,01D6,01D7 JNC 01C7; переход в начало цикла
01D8,01D9,01DA LDA 000E; младш. байт CT3 в аккум.
01DB,01DC CPI 01; А = 1?
01DD,01DE,01DF JNZ 01EE; переход к следующей проверке
01E0,01E1,01E2 LHLD 0009; загрузить в HL знач-е CT1
01E3,01E4 MVI M, 01; звание i-го персонажа = 1
01E5 INX HL; переход к сост-ю персонажа
01E6,01E7 MVI M,00; сост-е i-го персонажа = 0
01E8,01E9,01EA SHLD 0009
01EB,01EC,01ED JMP 023A; выход из блока проверок
01EE,01EF CPI 02; А = 2?
01F0,01F1,01F2 JNZ 0201
01F3,01F4,01F5 LHLD 0009
01F6,01F7 MVI M, 02
01F8 INX HL
01F9,01FA MVI M, 00
01FB,01FC,01FD SHLD 0009
01FE,01FF,0200 JMP 023A
0201,0202 CPI 03; А = 3?
0203,0204,0205 JNZ 0214
0206,0207,0208 LHLD 0009
0209,020A MVI M, 03
020B INX HL
020C,020D MVI M, 00
020E,020F,0210 SHLD 0009
0211,0212,0213 JMP 023A
0214,0215 CPI 04; А = 4?
0216,0217,0218 JNZ 0227
0219,021A,021B LHLD 0009
021C,021D MVI M, 04
021E INX HL
021F,0220 MVI M, 00
0221,0222,0223 SHLD 0009
0224,0225,0226 JMP 023A
0227,0228 CPI 05; А = 5?
0229,022A,022B JNZ 023A
022C,022D,022E LHLD 0009
022F,0230 MVI M, 05
0231 INX HL
0232,0233 MVI M, 00
0234,0235,0236 SHLD 0009
0237,0238,0239 JMP 023A
023A,023B,023C LHLD 0009
023D INX HL; CT1++
023E,023F,0240 SHLD 0009
0241,0242,0243 LDA 000A; младш. байт CT1 в аккум.
0244,0245 CPI 57; за последним персонажем?
0246,0247,0248 JNZ 014C; возврат в начало цикла
0249 NOP
024A NOP
024B NOP
024C NOP
024D NOP
024E NOP
024F NOP
0250 NOP
0251 RET
Принципиальная схема программного модуля ITERATION (в условных адресах):
ITERATION + 0 LXI HL, 0; в HL загр. 0
1
2
3 SHLD ОЗУ + 11; CT2 = 0
4
5
6 LDA ОЗУ + 15; загр. в аккум. знач-е DIR
7
8
9 CMA; DIR = !DIR
ITERATION + 10 STA ОЗУ + 15
11
12
13 CPI 0; DIR = 0?
14
15 JNZ ITERATION + 24
16
17
18 LXI HL, ОЗУ + 75;адр. 1-го персонажа
19
ITERATION + 20
21 JMP ITERATION + 27
22
23
24 LXI HL, ОЗУ + 83;адр. последнего персонажа
25
26
27 SHLD ОЗУ + 9; сохр. в CT1 адр. персонажа
28
29
ITERATION + 30 LHLD ОЗУ + 9;
31
32
33 INX HL
34 INX HL
