Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ_КП_1801.doc
Скачиваний:
10
Добавлен:
27.08.2019
Размер:
2.81 Mб
Скачать

Заключение

Методическое указание направлено на внедрение в головы студентов дополнительных полезных мыслей по поводу написания курсовой работы.

Ни одна из предложенных программ не является догмой, однако все программы рабочие.

Оптимизация разработанного кода – отдельная большая и интересная глава в программировании.

Приложения Приложение 1. Оформление отчета по курсовой работе

Отчет по курсовой работе выполняется каждым студентом индивидуально в машинописном виде на листах формата А4 и включает в себя титульный лист, задание, необходимую для курсовой работы теоретическую часть, алгоритмы и листинги программ, разработанных в процессе выполнения курсовой работы, таблицы исследования результатов работы программы и список используемой литературы. Листы отчета скрепляются при помощи степлера или вкладываются в файл или папку. Также при сдаче курсовой работы студент сдает преподавателю электронные варианты отчета и программы.

В исключительных случаях отчеты выполняются в рукописном виде с сохранением остальных требований по оформлению отчетов.

Ниже представлен пример написания отчета по курсовой работе.

Задание: Из массива 15 чисел выделить числа, у которых средний байт кратен 3 и эти числа расположить в порядке возрастания. Для остальных чисел найти среднеарифметическое.

Исходный массив: с адреса 1000, в младшем адресе младшее слово, по 2 слова на число

Массив 1 – для чисел, у которых средний байт кратен 3: начиная с адреса 2000

Массив 2 – для чисел, у которых средний байт не кратен 3: начиная с адреса 3000

Используемые ячейки памяти:

776) указатель для исходного массива;

774) размер массива 1 (указывает на последний его элемент);

772) размер массива 2 (указывает на последний его элемент);

770) указатель для массива 1;

766) указатель для массива 2;

764) флаг изменений (используется при сортировке);

762) и 760) временное хранение данных при обмене (используется при сортировке);

756) здесь временно хранится указатель массива (используется при сортировке);

754) размер массива 2, делитель;

752) сумма (старшее слово);

750) сумма (младшее слово), остаток от деления;

746) частное (старшее слово);

744) частное (младшее слово);

742) средний байт, остаток от деления на проверку кратности.

Блок-схема алгоритма.

Блок-схема алгоритма сортировки массива 1 по возрастанию.

Блок-схема алгоритма вычисления среднего арифметического чисел массива 2.

Начало программы. Задание начальных значений

3662) 012701

3664) 17

MOV #17, R1

обнуление массива 1

3666) 012700

3670) 2000

MOV #2000, R0

3672) 005010

CLR @R0

3674) 062700

3676) 2

ADD #2, R0

3700) 005301

DEC R1

3702) 001373

BNE 3672

3704) 012701

3706) 17

MOV #17, R1

обнуление массива 2

3710) 012700

3712) 3000

MOV #3000, R0

3714) 005010

CLR @R0

3716) 062700

3720) 2

ADD #2, R0

3722) 005301

DEC R1

3724) 001373

BNE 3714

3726) 005037

3730) 754

CLR @#754

обнуление результатов

3732) 005037

3734) 752

CLR @#752

3736) 005037

3740) 750

CLR @#750

3742) 012737

3744) 1000

3746) 776

MOV #1000, @#776

указатели – на начало

3750) 012737

3752) 2000

3754) 770

MOV #2000, @#770

3756) 012737

3760) 3000

3762) 766

MOV #3000, @#766

3764) 012737

3766) 1774

3770) 774

MOV #1774, @#774

массивы пусты,

3772) 012737

3774) 2774

3776) 772

MOV #2774, @#772

элементов нет

Разбиение исходного массива на массив 1 и массив 2

4000) 013705

4002) 776

MOV @#776, R5

скопировать младшее слово в R0

4004) 011500

MOV @R5, R0

4006) 006200

ASR R0

выделение среднего байта

4010) 006200

ASR R0

путем сдвига вправо старшего байта

4012) 006200

ASR R0

младшего слова числа

4014) 006200

ASR R0

4016) 006200

ASR R0

4020) 006200

ASR R0

4022) 006200

ASR R0

4024) 006200

ASR R0

4026) 010037

4030) 742

MOV R0, @#742

переслать в ячейку памяти 742

4032) 023727

4034) 742

4036) 3

CMP @#742, #3

можно ли ещё вычитать?

4040) 100404

BMI 4052

нет - проверить остаток, да - вычитаем

4042) 162737

4044) 3

4046) 742

SUB #3, @#742

вычитаем

4050) 000770

BR 4032

4052) 005737

4054) 742

TST @#742

проверяем остаток

4056) 001406

BEQ 4074

0 – массив 1

4060) 000440

BR 4162

массив 2

4062) 023727

4064) 776

4066) 1071

CMP @#776, #1071

проверка на конец массива

4070) 100743

BMI 4000

указатель не вышел за пределы

4072) 000471

BR 4256

достигнут конец массива, перейти к сортировке

4074) 013704

4076) 776

MOV @#776, R4

скопировать младшее слово

4100) 013705

4102) 770

MOV @#770, R5

4104) 011415

MOV @R4, @R5

4106) 062737

4110) 2

4112) 776

ADD #2, @#776

перейти к старшему байту

4114) 062737

4116) 2

4120) 770

ADD #2, @#770

4122) 013704

4124) 776

MOV @#776, R4

скопировать старший байт

4126) 013705

4130) 770

MOV @#770, R5

4132) 111400

MOV B @R4, R0

расширение знака

4134) 010015

MOV R0, @R5

4136) 062737

4140) 2

4142) 776

ADD #2, @#776

перейти к следующему числу

4144) 062737

4146) 2

4150) 770

ADD #2, @#770

4152) 062737

4154) 4

4156) 774

ADD #4, @#774

увеличить размер массива 1

4160) 000740

BR 4062

вернуться к проверке на конец

4162) 013704

4164) 776

MOV @#776, R4

скопировать младшее слово

4166) 013705

4170) 766

MOV @#766, R5

4172) 011415

MOV @R4, @R5

4174) 062737

4176) 2

4200) 776

ADD #2, @#776

перейти к старшему байту

4202) 062737

4204) 2

4206) 766

ADD #2, @#766

4210) 013704

4212) 776

MOV @#776, R4

скопировать старший байт

4214) 013705

4216) 766

MOV @#766, R5

4220) 111400

MOV B @R4, R0

расширение знака

4222) 010015

MOV R0, @R5

4224) 062737

4226) 2

4230) 776

ADD #2, @#776

4232) 062737

4234) 2

4236) 766

ADD #2, @#766

4240) 062737

4242) 4

4244) 772

ADD #4, @#772

увеличить размер массива 2

4246) 062737

4250) 1

4252) 754

ADD #1, @#754

увеличить размер массива 2

4254) 000702

BR 4062

вернуться к проверке на конец

Сортировка массива 1 по возрастанию

4256) 012737

4260) 2000

4262) 770

MOV #2000, @#770

установить указатель на 1-й элемент

4264) 005037

4266) 764

CLR @#764

очистить флаг изменений

4270) 023737

4272) 770

4274) 774

CMP @#770, @#774

проверка: последний элемент или нет

4276) 100405

BMI 4312

не последний, продолжаем

4300) 022737

4302) 1

4304) 764

CMP #1, @#764

если последний, менялся ли флаг?

4306) 001763

BEQ 4256

если менялся, сортируем сначала

4310) 000533

BR 4600

если нет, то сортировка завершена, переходим к массиву 2

4312) 013705

4314) 770

MOV @#770, R5

копируем текущее число в пару R1, R2

4316) 011502

MOV @R5, R2

4320) 062737

4322) 2

4324) 770

ADD #2, @#770

4326) 013705

4330) 770

MOV @#770, R5

4332) 011501

MOV @R5, R1

4334) 062737

4336) 2

4340) 770

ADD #2, @#770

и переходим к следующему

4342) 013705

4344) 770

MOV @#770, R5

копируем следующее число в пару R3, R4

4346) 011504

MOV @R5, R4

4350) 062737

4352) 2

4354) 770

ADD #2, @#770

4356) 013705

4360) 770

MOV @#770, R5

4362) 011503

MOV @R5, R3

4364) 162737

4366) 2

4370) 770

SUB #2, @#770

возвращаем указатель

4372) 020301

CMP R3, R1

сравниваем старшие слова

4374) 100405

BMI 4410

следующее < текущего, меняем

4376) 001401

BEQ 4402

если равны - сравнивать младшие слова

4400) 000733

BR 4270

иначе менять не надо, идём дальше

4402) 020402

CMP R4, R2

теперь сравниваем младшие слова

4404) 100401

BMI 4410

если следующее < текущего, надо менять

4406) 000730

BR 4270

в противном случае менять не надо

4410) 162737

4412) 4

4414) 770

SUB #4, @#770

ставим указатель на текущее значение

4416) 013737

4420) 770

4422) 756

MOV @#770, @#756

и сохраняем его

4424) 013705

4426) 770

MOV @#770, R5

сохраняем младшее слово

4430) 011537

4432) 762

MOV @R5, @#762

4434) 062737

4436) 2

4440) 770

ADD #2, @#770

переходим к старшему слову

4442) 013705

4444) 770

MOV @#770, R5

сохраняем старшее слово

4446) 011537

4450) 760

MOV @R5,@#760

4452) 062737

4454) 2

4456) 770

ADD #2, @#770

770) указывает на следующее слово

4460) 013704

4462) 770

MOV @#770, R4

следующее число в текущее

4464) 013705

4466) 756

MOV @#756, R5

4470) 011415

MOV @R4, @R5

4472) 062737

4474) 2

4476) 770

ADD #2, @#770

4500) 062737

4502) 2

4504) 756

ADD #2, @#756

4506) 013704

4510) 770

MOV @#770, R4

4512) 013705

4514) 756

MOV @#756, R5

4516) 011415

MOV @R4, @R5

4520) 162737

4522) 2

4524) 770

SUB #2, @#770

и возвращаем указатели

4526) 162737

4530) 2

4532) 756

SUB #2, @#756

4534) 013705

4536) 770

MOV @#770, R5

копию текущего в следующее

4540) 013715

4542) 762

MOV @#762, @R5

4544) 062737

4546) 2

4550) 770

ADD #2, @#770

4552) 013705

4554) 770

MOV @#770, R5

4556) 013715

4560) 760

MOV @#760, @R5

4562) 162737

4564) 2

4566) 770

SUB #2, @#770

и возвращаем указатель

4570) 012737

4572) 1

4574) 764

MOV #1, @#764

ставим флаг изменений

4576) 000634

BR 4270

и переходим к следующей паре

Вычисление среднего арифметического чисел массива 2

4600) 012737

4602) 3000

4604) 766

MOV #3000, @#766

ставим указатель массива на начало

4606) 023737

4610) 772

4612) 766

CMP @#772, @#766

проверка на конец

4614) 100421

BMI 4660

указатель вышел за пределы, делим на размер массива

4616) 013705

4620) 766

MOV @#766, R5

4622) 061537

4624) 750

ADD @R5, @#750

прибавить младшее слово

4626) 005537

4630) 752

ADC @#752

учесть перенос в старший байт

4632) 062737

4634) 2

4636) 766

ADD #2, @#766

4640) 013705

4642) 766

MOV @#766, R5

4644) 061537

4646) 752

ADD @R5, @#752

прибавить старшее слово

4650) 062737

4652) 2

4654) 766

ADD #2, @#766

перейти к следующему числу

4656) 000753

BR 4606

проверить на конец

4660) 005037

4662) 746

CLR @#746

очистить память для частного

4664) 005037

4666) 744

CLR @#744

4670) 005737

4672)754

TST @#754

4674) 001427

BEQ 4754

4676) 005737

4700) 752

TST @#752

смотрим старшее слово суммы

4702) 001007

BNE 4722

не ноль, делим

4704) 005737

4706) 750

TST @#750

смотрим младшее слово суммы

4710) 100404

BMI 4722

есть старший бит – делим

4712) 023737

4714) 754

4716) 750

CMP @#750, @#754

можно ли вычитать дальше?

4720) 100415

BMI 4754

нет – конец, да – делим

4722) 163737

4724) 754

4726) 750

SUB @#754, @#750

вычитаем

4730) 005637

4732) 752

SBC @#752

корректируем старшее слово

4734) 005237

4736) 744

INC @#744

увеличиваем счетчик – младшее слово частного

4740) 005737

4742) 744

TST @#744

проверить младшее слово

4744) 001354

BNE 4676

не ноль, делим

4746) 005237

4750) 746

INC @#746

ноль- корректируем старшее слово частного

4752) 000751

BR 4676

делим дальше

4754) 000000

HALT

конец