Особенности алгоритмов умножения дополнительных кодов



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

Пусть множитель B – число положительное. Поскольку умножение представляет собой операцию, заменяющую многократные сложения, а сумма дополнительный кодов дает дополнительный код суммы, то произведение кодов A-ДК ´ B+ДК даст дополнительный код произведения.

Сложней вычислить произведение перемножением дополнительных кодов двух отрицательных сомножителей. Действительно, пусть заданы дополнительные коды отрицательных сомножителей A-ДК и B-ДК. Тогда

 

A-ДК ´ B-ДК =(2EА ô)´(2EB ô)= 4E2-2EА ô+ô B ô)+ô А ô´ô B ô, (6.14)

где E – числовой эквивалент 1 знакового разряда.

Слагаемое 4E2-2EА ô+ô B ô) в (6.14) представляется кодом, у которого все цифры в пределах исходной РС сомножителей равны 0. Поэтому, если РС для представления произведения совпадает с РС сомножителей, то в коде рассматриваемого слагаемого все отличные от 0 цифры находятся левее РС и поэтому оказываются отброшенными. При этом в пределах исходной РС сомножителей остается код, задающий слагаемое ô А ô´ô B ô, то есть искомый код произведения.

Рассмотрим соответствующий пример.

Вычислим произведение перемножением дополнительных кодов сомножителей.

Пусть n= 8. Тогда 2 E =28=256. Пусть А = -1210; B= -910. Тогда A -ДК = 256 – 12 = 24410; B -ДК = 256 – 9 = 24710.

A- ДК´ B- ДК = 24410 ´24710 = 6026810 = 11101011 01101100 2

Младший байт в полученном коде (выделен полужирным шрифтом) задает число 011011002 = 10810.= (-12) ´ (-9). Таким образом, искомое произведение вычислено.

Рассмотренный пример в сочетании с (6.14) показывает, что при перемножении дополнительных кодов отрицательных сомножителей возникает проблема, если произведение представляется на РС удвоенной длины по сравнению с РС для представления сомножителей. Проблема связана с наличием слагаемого 4E2-2EА ô+ô B ô) в (6.14), которое в рассмотренном примере задается кодом 11101011 00000000 2. Как видно, в рассматриваемом случае вычисленное произведение дополнительных кодов необходимо скорректировать, чтобы старший байт произведения стал равен нулю. При этом «обнуление» старшего байта его маскированием недопустимо, так как он в общем случае не должен равняться 0, если перемножаются числа большие по модулю, чем рассмотрено в примере. Корректировка должна состоять в прибавлении к вычисленному произведению слагаемого 2EА ô+ô B ô) =(ô А ô+ô B ô)´ 2n = LnА ô+ô B ô). Такую корректировку кода, вычисленного в последнем примере, выполните самостоятельно.

6.6. Алгоритмы деления чисел
с фиксированным положением позиционной точки


Дата добавления: 2016-01-04; просмотров: 17; Мы поможем в написании вашей работы!

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






Мы поможем в написании ваших работ!