Контрольная работа: Построение арифметико-логического устройства для выполнения операции умножения целых чисел
Сумматор частичных произведений имеет цепи сдвига влево и регистры множителя тоже. Действия аналогично. Если анализируемая цифра множителя равна «1», то к текущему значению суммы частичных произведений добавляются содержимое регистра множимого. Выполняется сдвиг влево по разрядной сетке и содержимого сумматора и всё до окончания анализа всех разрядов множителя. В результате произведение размещается в сумматоре частичного произведения.
Сумматор частичных произведений и регистр множимого имеет двойную длину (двойную разрядность), регистр множителя – цепи сдвига влево, регистр множимого – вправо. Производится анализ старшего числового разряда множителя, если он равен «1», то к текущему значению суммы частичных произведений добавляется содержимое регистра множимого. Содержимое регистра множителя сдвигается влево, а регистр множимого – вправо на один разряд. Процесс продолжается до анализа последнего младшего разряда множителя.
Достоинства I, II, IV – возможность более эффективно реализовывать операцию деления. Кроме того II, IV варианты, имеющие неподвижную сумму частичных произведений позволяют параллельно выполнять операцию суммирования и сдвига, что есть производительнее.
Будем рассматривать I вариант.
Алгоритм операции умножения.
Будем считать, что операнды представлены прямым кодом, т.е. старший разряд знаковый, остальные – числовые.
1. Берутся модули от сомножителей;
2. Сумма частичных произведений полагается равной нулю;
3. Анализируется младший разряд множителя, если значение «1», то к текущему значению суммы частичных произведений добавляется множимое;
4. Содержимое регистра множителя и сумматора частичных произведений сдвигается вправо на одно деление;
5. п.3 и п.4 повторяются для всех разрядов множителя.
6. Для окончательного размещения результата в двоичном виде производят сдвиг вправо на 1 разряд.
7. Знак результата полагается «0», если сомножители имеют одинаковый знак и «1» (отрицательный результат), если сомножители имеют разные знаки. Операция не производится, если один из «0», и результат равен «0».
Основа для алгоритма является: Z=X(множимое)*Y(множитель)
Y – представим как соответствующие степени
Y=±yn-2 2n-2 + yn-3 2n-3 + y0 20 , тогда
Z=x*(yn-2 2n-2 + yn-3 2n-3 +y0 20 ) =x*2n-1 (yn-2 2-1 + yn-3 2-2 + y0 2--(n--1) )=
=2n-1 ((..(0+x* y0 )z--1 + x* y1 )* 2--1 +…+x*y n-1 ) 2-1 =A*2n-1 .
Текущему значению суммы частичных произведений добавляется множимое, если соответствующий разряд равен «1» и далее суммы частичных произведений сдвигаются вправо и т.д. Перенеся условную точку вправо через (n-1) разряд мы получим результат.
Рг1 для приёма множимого; Рг2 для приёма множителя. Входной РгА сумматора для размещения в нём очередной добавляемой компоненты к сумме частичных произведений. Входной РгБ См используется для размещения текущего значения суммы частичных произведений. Рг2' используется для формирования сдвига множителя вправо по разрядной сетке. Выходной РгСм, в котором формируются текущее значение суммы частичных произведений. Счётчик циклов используется для отображения количества обрабатываемых разрядов множителя.
На 1-м этапе выполняется размещение множимого в Рг1. Множимое может передаваться в РгА в прямом или инверсном кодах. На 2-м этапе в Рг2 размещается множитель, поступающий по ШД. Обнуляется содержимое РгВ, используемое вы качестве начального значения суммы частичных произведений. Далее анализируется младшая цифра множителя в Рг2. Если она =1, то в РгА передаётся содержимое Рг1 и на выходе См формируется текущее значение суммы частичных произведений. Одновременно передают множитель для анализа очередной цифры. Для этого его содержимое передаётся в Рг2' с сдвигом вправо на 1 по разрядной сетке. В свободный разряд Рг2' помещается младший разряд со входа См. Остальные разряды См предаются в РгСм со сдвигом вправо на 1 разряд. После этого значение РгСм размещается в РгВ. Содержимое Рг2' размещается в Рг2 и значение СчЦ уменьшается на 1 по отношению к первоначальному значению, равному количеству числовых разрядов.
Процесс продолжается для следующей цифры множителя. Когда содержимое СчЦ становится =0, процесс анализа завершается с получением в РгСм старших разрядов и в Рг2 младших разрядов произведения. После этого выполняется ещё 1 цикл с 0 значением РгА для правилного размещения результата в разрядной сетке двойного слова.
До сих пор мы полагали, что перемножаем целые неотрицательные числа. Для умножения чисел со знаками, можно отдельно умножать модули чисел, если они записаны в прямом коде, и затем формировать знак результата. Если отрицательные числа представлены в обратном или дополнительном коде, то для взятия модулей используется дополнительная операция, связанная с добавлением 1. Поэтому для умножения чисел со знаками используется практически тот же алгоритм с некоторыми модификациями.
Алгоритм умножения целых чисел с использованием прямого кода для положительных чисел и дополнительного для отрицательных.
1.Фиксируется знак сомножителей в специальных триггерах.
2.Сумма частичных произведений полагается =0.
3.Анализируется младшая цифра множителя. Если она =1, то к сумме частичных произведений добавляется множимое в том коде, в котором оно представлено. Если она =0, то добавление не производится.
4.Выполняется сдвиг вправо суммы частичных произведений на 1 разряд, причём, если значение суммы ≥0, то производится обычный сдвиг. Если текущее значение суммы частичных произведений <0, то производится модифицированный сдвиг с занесением 1 в знаковый разряд.
5.Пункты 3 и 4 повторяются для всех числовых разрядов множителя.