Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Разработка алгоритма программы




 

В анализе ТЗ было указано, что в микропроцессоре КР580ВМ80 отсутствуют команды многобайтного умножения и деления двоичных чисел. Поэтому были рассмотрены и выбраны методы программного вычисления данных операций.

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

Для реализации умножения был выбран метод вычисление произведения при помощи сдвига множимого и сложения частичных результатов сдвига. Алгоритм умножения приведен на рисунке 2.


Рисунок 2 - Алгоритм вычисления 25·X1.

В алгоритме применены следующие обозначения:

X1 - множимое;

P - частичная сумма (произведение);

S - промежуточный результат сдвига;

S<< - сдвиг влево с переносом числа S;

С - счетчик сдвигов

 

Для реализации деления был выбран метод со сдвигом остатка влево.

Алгоритм деления приведен на рисунке 3.


Рисунок 3 - Алгоритм деления двух чисел методом сдвигом остатка влево

 

В алгоритме применены следующие обозначения: D - частное; K - остаток от деления; X1 - делимое; X2 - делитель; С - счетчик бит; N - количество бит в делимом; B - текущий бит делимого; E - инвертированный признак займа при вычитании делителя из остатка.


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

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

 

Рисунок 4 - Алгоритм сложения многобайтных чисел X и Y.

В алгоритме применены следующие обозначения:

Tc - признак переноса;

N - количество байт в числе;

Xc - с-ый байт числа X;

Yc - с-ый байт числа Y;

С - счетчик байт;

 

Алгоритмы многобайтного сдвига влево и вычитания аналогичны алгоритму на рисунке 4, только вместо операции сложения используются соответственно операции сдвига и вычитания.

Из общей блок-схемы алгоритма на рисунке 1, а также из блок-схем на рисунках 2 и 3 видно, что алгоритмы сложения, вычитания и сдвига применяются в программе несколько раз, поэтому с целью минимизации объема программы, данные алгоритмы будут реализовываться в виде подпрограмм.

Таким образом, используя разработанные алгоритмы можно составить структурную схему алгоритма программы для микропроцессора КР580ВМ80.

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

Первая часть - основная программа, в которой выполняются следующие действия:

В блоке 1.1 выполняется инициализация указателя стека;

в блоке 1.2 загружается число x1 в переменную tmp1, tmp3 и tmp4;

в блоке 1.3 обнуляется пятый байт переменных tmp1, tmp3 и tmp4;

в блоке 1.4 загружается число x2 в переменную tmp2 и обнуляется пятый байт переменной tmp2;

в блоке 1.5 вызывается подпрограмма многобайтного сложения чисел в переменных tmp4 и tmp2, результат записывается в переменную tmp4;

в блоке 1.5 вызывается подпрограмма умножения чисел в переменных tmp1 и tmp2, результат записывается в переменную tmp3;

блоки 1.6-1.12 соответствуют функциональному алгоритму на рисунке 2 (умножение x1 на 25):

в блоке 1.6 загружается число сдвигов в регистр C и в блоках 1.7-1.9 выполняется цикл сдвига на 3 разряда с учетом переноса, сдвиг на один разряд многобайтного числа выполняется при помощи подпрограммы в блоке 1.7;

в блоке 1.10 выполняется сложение результата сдвига (в переменной tmp1) и числа x1 (в переменной tmp3), результат сохраняется в tmp3;

в блоке 1.11 выполняется еще один сдвиг влево на один разряд числа в tmp1;

в блоке 1.12 вычисляется окончательный результат умножения путем сложения чисел в tmp1 и tmp3, результат сохраняется в tmp3;

в блоках 1.13-1.22 выполняется деление числа в переменной tmp4 (сумма x1 и x2) на число в tmp3 (произведение 25 и x1), результат записывается в tmp1: в блоке 1.13 обнуляются переменные частного tmp1 и остатка tmp2, в регистр С загружается количество бит в делимом (40) и сбрасывается признак переноса, далее идет цикл деления (блоки 1.14-1.22): делимое сдвигается влево (блок 1.14), остаток сдвигается влево (блок 1.15), из остатка вычитается делитель (блок 1.16) и если результат меньше нуля (блок 1.17), остаток восстанавливается (блоки 1.18), далее вычисляется очередной бит частного (блок 1.19) и частное сдвигается влево (блок 1.20), уменьшается на один число в регистре С (блок 1.21), выход из цикла происходит если в регистре С ноль (блок 1.22);

в блоке 1.23 значение функции в переменной tmp1 сохраняется в переменную y.

Вторая часть - подпрограмма сложения двух 5-и байтных двоичных чисел, адреса которых находятся в регистровых парах HL и DE соответственно. Результат помещается в ячейках памяти на место первого числа.

В блоке 2.1 сбрасывается признак переноса, в блоке 2.2 в регистр В загружается количество байт в числах, далее идет цикл сложения (блоки 2.3-2.9): байт второго числа загружается в аккумулятор (блок 2.3), складывается с первым числом (блок 2.4) и с признаком переноса, и сохраняется в память (блок 2.5), увеличиваются адреса байт (блоки 2.6,2.7), уменьшается на один число в регистре B (блок 2.8), выход из цикла происходит, если в регистре B ноль (блок 2.9).

Третья часть - подпрограмма вычитания двух 5-и байтных двоичных чисел, адреса которых находятся в регистровых парах HL и DE соответственно. Результат помещается в ячейках памяти на место второго числа.

В блоке 3.1 сбрасывается признак переноса, в блоке 3.2 в регистр В загружается количество байт в числах, далее идет цикл вычитания (блоки 3.3-3.9): байт второго числа загружается в аккумулятор (блок 3.3), из него вычитается байт первого числа и признак переноса (блок 3.4), и результат сохраняется в память (блок 3.5), увеличиваются адреса байт (блоки 3.6,3.7), уменьшается на один число в регистре B (блок 3.8), выход из цикла происходит, если в регистре B ноль (блок 3.9).

Четвертая часть - подпрограмма сдвига влево с учетом переноса 5-и байтового двоичного числа, адрес которого находится в регистровой паре HL:

В блоке 4.1 в регистр В загружается количество байт в числе, далее идет цикл сдвига (блоки 4.2-4.7): байт числа загружается в аккумулятор (блок 4.2), сдвигается (блок 4.3) и сохраняется в память (блок 4.4), увеличивается адрес байта (блок 4.5), уменьшается на один число в регистре B (блок 4.6), выход из цикла происходит если в регистре B ноль (блок 4.7).

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

 





Поделиться с друзьями:


Дата добавления: 2018-11-10; Мы поможем в написании ваших работ!; просмотров: 224 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Настоящая ответственность бывает только личной. © Фазиль Искандер
==> читать все изречения...

2364 - | 2087 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.008 с.