Умножение двоичных чисел с фиксированной запятой на ДСДК, схема 3
Схема Горнера в этом случае имеет вид:
[C]д = [A]д (b12-1+b22-2+…+bn2-n-1)=( [A]д *2-n) (b12n-1+b2 2n-2+…+bn-1 2+bn –SgB 2n)=[A`]д´(b12n-1+b2 2n-2+…+bn-1 2+bn –SgB 2n)= =SgB([`A‘]д2n)+b1([A‘]д2n-1)+b2([A‘]д2n-2 )+…+bn-1([A‘]д2)+n [A‘]д | (10) |
Из выражения (10) следует, что
1. множимое в начале выполнения операции сдвигается на n разрядов вправо; поэтому регистр А должен иметь двойную точность;
2. при умножении на отрицательный множитель выполняется одна коррекция в конце выполнения операции умножения;
3. разряды множителя анализируются, начиная с младшего разряда;
4. множимое в каждом цикле умножения сдвигается на один разряд влево.
Пример. Пусть А=0,1101, В=-0,1011. С учетом сказанного выше, в РгА после сдвига на n=4 разрядов вправо находится число 0,0000 1101, дополнительный код множителя находится в регистре В. [B]д =1.0101. Процедура выполнения умножения приведена в таблице 10.
Таблица 10 Умножение на ДСДК, схема 3
СМ | РгА | РгВ | СТ | Комментарии |
0.0000.0000 | 0.0000.1101 | 1.0101 | СМ:=0, РгА:= [A ‘]д, РгВ:= [В]д, СТ:=4, | |
+0.0000.1101 0.0000.1101 | РгВ[4]=1? ДА СМ:=СМ+РгА, | |||
0.0001 1010 | -1.010 | СТ=0? НЕТ РгА:=L(1) РгА, РгВ:=R(1)РгВ, СТ:=СТ-1, | ||
0.0011 0100 | --1.01 | РгВ[4]=1? НЕТ Пропускаем такт подсуммирования. Выполняем сдвиги РгА и РгВ и декремент счетчика. | ||
0.0000 1101 +0.0011 0100 0.0100 0001 | РгВ[4]=1? ДА СМ:=СМ+РгА, | |||
0.0110 1000 | ---1.0 | СТ=0? НЕТ РгА:=L(1) РгА, РгВ:=R(1)РгВ, СТ:=СТ-1, | ||
0.1101 0000 | ----1. | РгВ[4]=1? НЕТ Пропускаем такт подсуммирования. Выполняем сдвиги РгА и РгВ и декремент счетчика. | ||
0.0100 0001 +1.0011 0000 1.0111 0001 | СТ=0? ДА Проверяем значение знака В. Так как SgB=1, выполняем коррекцию. СМ:=СМ+Рг`А, |
Ответ: [C]д=1.0111 0001. Или в естественной записи С= -0.1000 1111.
Умножение двоичных чисел с фиксированной запятой на ДСОК, схема 3
Схема Горнера в этом случае имеет вид:
[C]о = [A]о (b12-1+b22-2+…+bn2-n-SgB +SgB 2-n)= ( [A]o *2-n) (b12n-1+b2 2n-2+…+bn-1 2+bn –SgB 2n + SgB)= =[A ‘]o* (b12n-1+b2 2n-2+…+bn-1 2+bn –SgB 2n + SgB)= =SgB([`A‘]o 2n)+b1([A‘]o2n-1)+b2([A‘]o2n-2 )+…+bn-1([A‘]o2)+bn [A‘]o+SgB[A’]o | (11) |
Из (11) заключаем, что в этом случае вначале выполняется коррекция +SgB[A’]o, а затем все происходит так же, как при умножении на ДСДК. Пример выполнения умножения приведен в таблице 11.
Таблица 11 Умножение двоичных чисел на ДСОК, схема 3
СМ | РгА | РгВ | СТ | Комментарии |
1.1111 1111 +1.1111 0010 1.1111 0001 + 1 1.1111 0010 | 1.1111 0010 | 1.0100 | СМ:=0, РгА:= [A’]o, РгВ:=[B]o, СТ:=4, | |
SgB=1?ДА Выполняем первую коррекцию. СМ:=СМ+РгА, | ||||
1.1110 0101 | -1.010 | РгВ[4]=1? НЕТ Пропускаем такт подсуммирования. СТ=0? НЕТ РгА:=L(1) РгА, РгВ:=R(1)РгВ, СТ:=СТ-1, | ||
1.1100 1011 | --1.01 | РгВ[4]=1? НЕТ Пропускаем такт подсуммирования. СТ=0? НЕТ РгА:=L(1) РгА, РгВ:=R(1)РгВ, СТ:=СТ-1, | ||
1.1111 0010 +1.1100 1011 1.1011 1110 | РгВ[4]=1? ДА СМ:=СМ+РгА, здесь уже подсуммирована единица, спадающая со знакового разряда. | |||
1.1001 0111 | ---1.0 | СТ=0? НЕТ РгА:=L(1) РгА, РгВ:=R(1)РгВ, СТ:=СТ-1, | ||
1.0010 1111 | ----1. | РгВ[4]=1? НЕТ Пропускаем такт подсуммирования. СТ=0? НЕТ РгА:=L(1) РгА, РгВ:=R(1)РгВ, СТ:=СТ-1, | ||
1.1011 1110 +0.1101 0000 0.1000 1111 | СТ=0? ДА РгВ[4]=1 ДА Выполняем вторую коррекцию СМ:=СМ+Рг`А, Конец. В сумматоре находится результат умножения. |
Дата добавления: 2019-04-03; просмотров: 612;