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

В анализе ТЗ было указано, что в микропроцессоре КР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).

Перейти на страницу: 1 2

Другое по теме:

Разработка и исследование в среде Multisim 10 формирователя электрического сигнала трапецеидальной формы
Целью курсового проекта является овладение навыками проектирования различных электронных схем, используемых в аппаратуре вычислительной техники и развитие навыков работы с технической и справочной литературой. В курсовом п ...

Разработка конструкторской документации на изделие USB-термометр
Развитие в конструировании электронной техники происходит с каждым годом. Это связано в первую очередь с развитием полупроводниковых элементов. Замена электронных ламп на полупроводниковые транзисторы и диоды открыло новый эта ...

©  www.techvarious.ru - 2020