Цель работы изучение работы арифметико-логического устройства при выполнении операции умножения над числами с фиксированной запятой.
Функционирование АЛУ при выполнении операции умножения Алгоритм умножения двоичных чисел с фиксированной запятой, представленных в прямом коде В каждом цикле выполнения операции умножения анализируется очередная цифра множителя. Если очередная цифра множителя равна 1, то к сумме частичных произведений прибавляется множимое, в противном случае прибавляется нуль. Цикл завершается сдвигом множимого относительно суммы частичных произведений либо сдвигом суммы частичных произведений относительно неподвижного множимого. Таким образом, выполнение операции умножения в АЛУ сводится к последовательности операций сложения и сдвига.
В случае отрицательного операнда при умножении чисел, представленных в прямом коде, операция умножения сводится к выполнению следующих этапов:
определение знака произведения путем сложения по модулю 2 знаковых разрядов множимого и множителя;
обнуление знаковых разрядов отрицательных операндов;
выполнение операции умножения чисел, представленных в прямом коде.
Существует четыре способа умножения чисел с фиксированной точкой. При выполнении операции умножения можно сдвигать либо множимое, либо промежуточный результат и начинать анализ множителя либо с младших разрядов, либо со старших. Соответственно различают четыре структуры АЛУ для этой операции. Рассмотрим указанные способы умножения чисел с фиксированной точкой.
Умножение чисел, представленных в прямом коде, начиная с младших разрядов множителя, со сдвигом суммы частичных произведений вправо и при неподвижном множимом.
Пример 1.
Рассмотрим пример выполнения операции умножения: С=А*В, где А=14(10)=01110(2), В=4(10)=00100(2). При выполнении операции умножения будем сдвигать сумму частичных произведений вправо и анализировать разряды множителя, начиная с младшего разряда. Для простоты будем работать на 5-разрядной сетке (4 информационных разряда, 1 знаковый разряд).
Множитель
| Зн.
| Информ. разряды
| 4-й
| 3-й
| 2-й
| 1-й
| 0-й
| 0
| 0
| 1
| 0
| 0
|
Зн.
| Информ. разряды
| Описание действий
| 0
| 1110
|
| Множимое (мн-ое)
| 0
| 0100
|
| Множитель (мн-ль)
| 0
| 0000
| ->
| Сумма частичных произведений (СЧП)
| 0
| 0000
| 0 ->
| Сдвиг СЧП на 1 разряд вправо (0-й разряд множителя =0)
| +0
| 0000
| 00
| Сдвиг СЧП на 1 разряд вправо (1-й разряд множителя =0)
| 0
| 1110
|
| Множимое
| 0
| 1110
| 00 ->
| СЧП (2-й разряд множителя =1)
| 0
| 0111
| 000 ->
| Сдвиг СЧП на 1 разряд вправо
| 0
| 0011
| 1000 ->
| Сдвиг СЧП на 1 разряд вправо (3-й разряд множителя =0)
| 0
| 0001
| 11000
| Сдвиг СЧП на 1 разряд вправо (4-й разряд множителя =0)
|
Знак результата формируется операцией сложения по модулю 2 знаков множимого и множителя: Z=00=0. Результат С=0000111000(2)=56(10).
Умножение чисел, представленных в прямом коде, начиная с младших разрядов множителя, со сдвигом множимого влево и при неподвижной сумме частичных произведений.
Пример 2.
Рассмотрим пример выполнения операции умножения: С=А*В, где А=11(10)=01011(2), В=-5(10)=10101(2). Числа представлены в прямом коде. При выполнении операции умножения будем сдвигать множимое влево и анализировать разряды множителя, начиная с младшего разряда. Для простоты будем работать на 5-разрядной сетке (4 информационных разряда, 1 знаковый разряд).
Множитель
| Зн.
| Информац. разряды
| 4-й
| 3-й
| 2-й
| 1-й
| 0-й
| 0
| 0
| 1
| 0
| 1
|
Информ. разряды
| Описание действий
|
| 01011
| Множимое
|
| 00101
| Множитель
| +
| 00000
| Сумма частичных произведений, 0-ой разряд множителя =1
|
| 01011
| Множимое
| +
| 01011
| СЧП, Сдвиг мн-ого на 1 разряд влево, 1-й разряд множителя =0
| 0
| 0000
|
| +0
| 01011
| СЧП, Сдвиг мн-ого на 1 разряд влево, 2-й разряд множителя =1
| 01
| 011
| Сдвинутое множимое
| +01
| 10111
| СЧП, Сдвиг мн-ого на 1 разряд влево, 3-й разряд множителя =0
| 000
| 00
|
| +001
| 10111
| СЧП, Сдвиг мн-ого на 1 разряд влево, 4-й разряд множителя =0
| 0000
| 0
|
| 0001
| 10111
| Результат операции умножения
|
Знак результата формируется операцией сложения по модулю 2 знаков множимого и множителя: Z=01=1. Результат С=1000110111(2)=-55(10).
Умножение чисел, представленных в прямом коде, начиная со старших разрядов множителя, со сдвигом суммы частичных произведений влево и при неподвижном множимом.
Пример 3. Рассмотрим пример выполнения операции умножения: С=А*В, где А=13(10)=01101(2), В=9(10)=01001(2). При выполнении операции умножения будем сдвигать сумму частичных произведений влево и анализировать разряды множителя, начиная со старшего разряда. Для простоты будем работать на 5-разрядной сетке (4 информационных разряда, 1 знаковый разряд).
Множитель
| Зн.
| Информац. разряды
| 4-й
| 3-й
| 2-й
| 1-й
| 0-й
| 0
| 1
| 1
| 0
| 1
|
Информ. разряды
| Описание действий
|
| 01101
| Множимое
|
| 01001
| Множитель
| <-
| 00000
| СЧП, 4-ый разряд множителя =0
| +0
| 00000
| Сдвиг СЧП на 1 разряд влево, 3-й разряд множителя =1
|
| 01101
| Множимое
| <-0
| 01101
| Сумма частичных произведений
| +00
| 11010
| Сдвиг СЧП на 1 разряд влево, 2-й разряд множителя =0
|
|
|
|
| 00000
|
| <-00
| 11010
| Сумма частичных произведений
| +001
| 10100
| Сдвиг СЧП на 1 разряд влево, 1-й разряд множителя =0
|
| 00000
|
| <-001
| 10100
| Сумма частичных произведений
| +0011
| 01000
| Сдвиг СЧП на 1 разряд влево, 0-й разряд множителя =1
|
| 01101
| Множимое
| 0011
| 10101
| Результат операции умножения
| Знак результата формируется операцией сложения по модулю 2 знаков множимого и множителя: Z=00=0. Результат С=0001110101(2)=117(10).
Умножение чисел, представленных в прямом коде, начиная со старших разрядов множителя, со сдвигом множимого вправо и при неподвижной сумме частичных произведений.
Пример 4. Рассмотрим пример выполнения операции умножения: С=А*В, где А=11(10)=01011(2), В=15(10)=01111(2). Числа представлены в прямом коде. При выполнении операции умножения будем сдвигать множимое вправо и анализировать разряды множителя, начиная со старшего разряда. Для простоты будем работать на 5-разрядной сетке (4 информационных разряда, 1 знаковый разряд).
Множитель
| Зн.
| Информац. разряды
| 4-й
| 3-й
| 2-й
| 1-й
| 0-й
| 0
| 1
| 1
| 1
| 1
|
Зн.
| Информ. разряды
| Описание действий
| 0
| 1011
|
| Множимое
| 0
| 1111
|
| Множитель
| 0
| 0000
|
| СЧП, 4-й разряд мн-ля =0, Сдвиг мн-го на 1р. вправо
| +0
| 0000
|
| СЧП, 3-й разряд мн-ля =1
| 0
| 0101
| 1
| Мн-мое, сдвинутое на 1 разряд вправо
| +0
| 0101
| 1
| СЧП, 2-й разряд мн-ля =1
| 0
| 0010
| 11
| Мн-мое, сдвинутое на 1 разряд вправо
| +0
| 1000
| 01
| СЧП, 1-й разряд мн-ля =1
| 0
| 0001
| 011
| Мн-мое, сдвинутое на 1 разряд вправо
| +0
| 1000
| 01
| СЧП, 0-й разряд мн-ля =1
| 0
| 0000
| 1011
| Мн-мое, сдвинутое на 1 разряд вправо
| 0
| 1010
| 0101
| Результат операции умножения
|
Знак результата формируется операцией сложения по модулю 2 знаков множимого и множителя: Z=00=0. Результат С=0010100101(2)=154(10). Примем разрядность операндов n, тогда разрядность произведения будет 2n.
Из сравнения структуры АЛУ для каждого рассмотренного метода умножения чисел, представленных в прямом коде, по таблице 2.1 видно, что:
если сдвигать множимое (методы 2 и 4), то аппаратные затраты составят:
для множимого 2n разрядов;
для множителя n разрядов;
для произведения 2n разрядов;
если сдвигать сумму частичных произведений влево (метод 3), то для произведения аппаратные разряды составят 2n разрядов;
если сдвигать сумму частичных произведений вправо (метод 1), то вытесняемые разряды можно записывать в регистр множителя. При использовании этого способа размерность всех регистров может быть n разрядов. Это наиболее экономичный способ организации выполнения операции умножения. Он будет использоваться при моделировании.
Таблица 2.1. Сравнение структуры АЛУ для каждого метода умножения
Элементы структуры АЛУ
| Методы умножения
| 1
| 2
| 3
| 4
| Регистр множителя
| Регистр со сдвигом вправо, n-разрядный, после выполнения операции умножения содержит мл. разряды произведения
| Регистр со сдвигом вправо, n-разрядный
| Регистр со сдвигом влево, n-разрядный
| Регистр со сдвигом влево, n-разрядный
| Регистр множимого
| n-разрядный регистр
| Регистр со сдвигом влево, 2n-разрядный
| n-разрядный регистр
| Регистр со сдвигом вправо, 2n-разрядный
| Сумматор частичных произведений
| Регистр со сдвигом вправо, n-разрядный, после выполнения операции умножения содержит ст. разряды произведения
| 2n-разрядный регистр, после выполнения операции умножения содержит произведение
| Регистр со сдвигом влево, 2n-разрядный, после выполнения операции умножения содержит произведение
| 2n-разрядный регистр, после выполнения операции умножения содержит произведение
|
Алгоритм умножения двоичных чисел с фиксированной запятой, представленных в дополнительном коде Рассмотрим алгоритм умножения двоичных чисел с фиксированной запятой, начиная с младших разрядов множителя, со сдвигом суммы частичных произведений и использованием дополнительного кода для отрицательных чисел.
Данный алгоритм умножения заключается в следующем:
Сомножители представляются дополнительным кодом. Так как дополнительный код положительного числа совпадает с прямым кодом, то положительные числа будут представлены в прямом коде, а отрицательные – в дополнительном.
Исходное значение суммы частичных произведений принимается равным 0.
Если анализируемая цифра множителя равна 1, то к сумме частичных произведений прибавляется множимое в том коде, в котором оно представлено. Прибавление производится с выравниванием складываемых чисел по старшим разрядам. Если анализируемая цифра множителя равна 0, прибавление не производится.
Сумма частичных произведений сдвигается на один разряд вправо, при этом, если сумма отрицательна, осуществляется модифицированный сдвиг.
Пункты 3 и 4 последовательно выполняются для всех цифровых разрядов множителя, начиная с младшего.
Если множитель – положительное число, полученный результат представляет собой произведение. Если множитель отрицателен, то для получения произведения к результату прибавляется множимое с обратным знаком. При этом прибавление производится с выравниванием складываемых чисел по старшим разрядам. Если результат размещается в двойном слове, то он предварительно сдвигается на один разряд вправо.
Произведение получается в прямом коде, если сомножители имеют одинаковые знаки, и в дополнительном, если сомножители имеют разные знаки.
|