www.chms.ru - вывоз мусора в Балашихе 

Динамо-машины  Обратные коды 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 [ 138 ] 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189

ния (рис. 4-8). Цепи эти устроим так, чтобы каждый раз, как на регистр А, скажем, подается команда laquo;удвоение raquo;, число с выходов цепей удвоения возвращалось бы в регистр А, заменяя в нем исходное число; то же должно происходить и в регистре С при делении пополам.

/ lt;сгет тювлен.

иепи вВоения

(иифро выходят.

за пределы регистра А)

Регистр А

Регистр В

1 1

Команда

Сштатор

1 пшмпппвпнпг?

Регистре

\ 1 Команда

Цепи Явления пополам

---------кетепощ-

Рис. 4-8. Построение арифметического устройства при выполнении умножения методом удвоения и деления пополам.

Изменения в порядке выполнения операции сводятся к следующему. Нормально каждый цикл умножения состоит из сдвига влево в регистре А, сдвига вправо в регистре С (т. е. фактически из умножения Л на 10 и деления С на 10) и суммирований; количество суммирований соответствует количеству единиц в той цифре, которая выходит за пределы регистра Л при сдвиге влево. Теперь вместо сдвигов в каждый цикл войдет удвоение числа в регистре Л и деление пополам числа в регистре С; вслед за тактом удвоения и деления пополам либо выполняется одно суммирование, если при удвоении числа за пределы регистра Л выходит единица, либо суммирование не производится, если за пределы регистра Л выходит нуль.

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

Действительно. Когда в первом цикле умножения мы производим удвоение множителя Л и фиксируем цифру, которая получается слева от запятой (за пределами регист-



pa A), to тем самым проверяется, больше ли множитель, чем Vi, или меньше; если множитель больше или равен 1/2, то после его удвоения в разряде целых получим 1, если множитель меньше V2, то после его удвоения цифра в разряде целых есть 0. Цифра, которая оказывается за пределами регистра А после первого удвоения множителя (1 или 0), является старшей цифрой в двоичном представлении множителя; она относится к разряду с весом Ч- В регистре А при этомостается величина 2 (Л - а), где А - исходное значение множителя, йх - число, представленное его первой двоичной цифрой (если первая двоичная цифра есть 1, то = если первая двоичная цифра есть О, то Gi = 0).

Для того чтобы найти следуюп],ую двоичную цифру (относящуюся к разряду с весом /, нужно узнать, больше ли величина А - чем V4 или меньше. С этой целью мы производим новое удвоение в регистре Л, т. е. находим величину 4 (Л - Gi) и проверяем, получилась ли эта величина больше единицы. Если при втором удвоении за пределы регистра Л вышла единица, то это значит, что 4 (Л - - fli) gt; 1 (т. е. Л - fli gt; V4), и, следовательно, вторая цифра в двоичном представлении множителя есть 1; если после второго удвоения в разряде целых оказывается нуль, то это значит, что 4(Л-а) lt; I (т. е. Л-oi lt;С V4), и вторая цифра в двоичном представлении множителя есть 0. В регистре А при этом остается величина 4 (Л - laquo;а) raquo; где laquo;2 - число, представленное первыми двумя двоичными цифрами. Удваивая затем эту величину, найдем третью двоичную цифру (относящуюся к разряду с весом Vg) и т. д.

Итак, в процессе умножения шаг за шагом осуществляется перевод множителя в двоичную систему, причем очередные двоичные цифры в каждом цикле получаются слева от запятой в регистре Л.

В тот момент, когда за пределами регистра Л находится первая цифра двоичного представления множителя (относящаяся к разряду с весом Vg), в регистре множимого С находится результат первого деления множимого пополам- величина Vg С. Если первая двоичная цифра множителя есть 1, то величина С добавляется к регистру В, если О - не добавляется. Во втором цикле умножения, когда



за пределами регистра А находится вторая двоичная цифра множителя (относящаяся к разряду с весом V4), в регистре множимого находится результат второго деления пополам - величина V4 С; в зависимости от второй двоичной цифры множителя она либо добавляется, либо не добавляется к содержимому регистра В и т.д. Таким образом, умножение выполняется фактически как бы в двоичной системе счисления; однако при этом сами суммирования производятся в десятичной системе, и результат в регистре С получается десятичным.

Пример. Пусть требуется произвести умножение 0,738 X 0,476.

Точный результат должен быть равен 0,351288. Однако в дальнейшем мы получим его с некоторой погрешностью. В принципе некоторая ошибка могла бы возникнуть в результате округления множимого (так как количество разрядов в регистре множимого ограничено и при делении множимого пополам за пределы регистра уходят вправо младшие цифры - ср. с 4.1.4). Однако этой ошибки можно избежать, выписывая каждый раз все цифры очередного деления множимого пополам и все цифры суммы частичных произведений (в действительности, конечно, все цифры сохранять не нужно); цифры, находящиеся за пределами регистров, мы будем записывать в круглых скобках. Дополнительная погрешность получается за счет того, что множитель не переводится в двоичную систему точно. Трем десятичным знакам множителя должны соответствовать по точности 10-11 двоичных разрядов, т. е. в нашем случае 10-И циклов умножения; младшими двоичными разрядами мы просто пренебрежем, оборвав умножение на 11-м цикле.

Итак, начальное расположение чисел:

множитель (Л) .476 множимое (С) .738 (В) .ООО.

В первом цикле удваиваем число в регистре Л и делим пополам число в регистре С. Поскольку за пределы регистра А влево выходит нуль (первая цифра в двоичном представлении множителя есть 0), суммирование в первом цикле не производится, и ,в регистре В сохраняются нули. После



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 [ 138 ] 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189