- •Введение
- •1 Постановка задачи
- •2 Анализ и формализованное описание задачи.
- •3 Выбор или разработка алгоритма решения задачи
- •4 Проектирование структуры программы
- •5 Кодирование
- •6 Отладка и тестирование программы
- •7 Интерпретация результатов расчета и возможная корректировка формализованного описания задачи
- •8 Передача программы заказчику
- •9 Сопровождение программы
3 Выбор или разработка алгоритма решения задачи
Этот этап является особенно важным, т.к. тщательно проработанный алгоритм является необходимым условием эффективной работы над программой.
Микропроцессор К580 не содержит в своем составе команд деления чисел. Поэтому для деления числа на 2 следует воспользоваться командой сдвига вправо, что для целочисленных значений приводит к эквивалентному результату.
4 Проектирование структуры программы
Здесь составляется блок-схема алгоритма, определяются те части алгоритма, которые целесообразно оформить в виде подпрограмм. Также определяется способ хранения информации: набор простых переменных, массив и др.
В виду не слишком большого объема команд, необходимых для реализации описанного в разделе 3 алгоритма, программа может быть реализована в виде линейной программы без подпрограмм
Вход
LDA
6000h
ANI 1
MOV B,A
LDA
6001h
ANI 1
ANA B
MOV B,A
LDA
6000h
ADI 0
1
1
RRC
ADD B
MOV B,A
LDA
6001h
ADI 0
RRC
ADD B
STA
6002h
Конец
5 Кодирование
На этом этапе осуществляется запись алгоритма на языке программирования. В том случае, если алгоритм, структура программы и структура данных тщательно продуманы и корректно записаны, то затраты времени на кодирование уменьшаются, а вероятность ошибок на этом этапе снижается.
Ниже приведен исходный код программы на языке Ассемблера для микропроцессора К580. Каждая строка кода снабжена комментарием.
;Адрес начала программы байт 6003
ORG 6003h
;Загрузка в аккумулятор числа X1 из ячейки 6000h
LDA 6000h
;Операция И аккумулятора и значения 1 для выделения младшего разряда,
:если число нечетное, аккумулятор будет содержать 1
ANI 1
;Запомнить аккумулятор в регистре B
MOV B,A
;Загрузка в аккумулятор числа X2 из ячейки 6001h
LDA 6001h
;Операция И аккумулятора и значения 1 для выделения младшего разряда,
:если число нечетное, аккумулятор будет содержать 1
ANI 1
;Логическое сложение аккумулятор с регистром B, который будет содержать
;1, только в том случае, если оба числа нечетные
ANA B
;Запомнить аккумулятор в регистре B
MOV B,A
;Загрузка в аккумулятор числа X1 из ячейки 6000h
LDA 6000h
;Сброс признака С (перенос)
ADI 0
;Сдвиг вправо на 1, в аккумуляторе получится X1/2
RRC
;Добавление к X1/2 1, если X1 и X2 нечетные, иначе добавится 0
ADD B
;Запомнить аккумулятор в регистре B
MOV B,A
;Загрузка в аккумулятор числа X2 из ячейки 6001h
LDA 6001h
;Сброс признака С (перенос)
ADI 0
;Сдвиг вправо на 1, в аккумуляторе получится X2/2
RRC
;Добавление к X2/2 X1/2
ADD B
;Запись среднего арифметического в ячейку 6002h
STA 6002h
;Останов работы программы
HLT
