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

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

Экономия во времени выполнения сложения-вьиитания по сравнению с основным методом получается за счет того, что одно из суммирований производится не полностью. На него затрачивается вместо полного времени суммирования Те = тт + Хв только время тхв (где т - количество разрядов, Т - задержка переноса на разряд, хв - время образования суммы). Максимальное время выполнения сложения-вычитания в параллельном устройстве теперь оказьшается равным 2хд + 2тхЕ + хв (где Тр - время обращения кода) вместо 2то-1-2те = 2То+2тт +2тв в основном

методе; среднее время равно теперь тхц + хв вмес-

4 4 4

ТО То + g Те = То + тхЕ + 3 для основного метода. Лишнее оборудование, которое необходимо по срав нению со случаем использования основного метода (см-рис. 3-1, с), - это устройство для обращения кода в регистре С; однако из дальнейшего видно, что такое устройство все равно необходимо и для выполнения других операций (например, деления).

В последовательных устройствах применение такого метода, очевидно, невыгодно, так как для полного суммирования двух чисел требуется такое же время, как для образования сигналов двоичного переноса (один период числа). Более того, если первый период числа мы потратили бы на образование сигналов переноса без полного суммирования, то тогда во всех случаях вычитания (а не только в части из них) пришлось бы тратить еще один период числа на окончательное суммирование, так что среднее время выполнения операции даже возросло бы по сравнению с основным вариантом.

Но и для параллельных устройств описанный метод не универсален, так как предъявляет некоторые специальные требования к сумматору. Выигрыш по скорости, который он дает, не очень значителен (особенно в среднем).

Более универсальным (хотя тоже только для параллельных устройств) и более быстрым является метод, предусматривающий выполнение вычитания через обратные



коды (в отличие от предыдущих методов, в которых выполнялось вычитание..через дополнительные коды). Идея этого метод;а состоит в том, что если бы счет в машине шел не по модулю 1 ано модулю 1-2 raquo; , где 2- - вес младшего разряда (т. е.вдвоичной системе по модулю 0.111...11), то в процессе вычитания, нам нужно было бы вычислять не дополнительные коды, а всегда только обратные коды чисел *). При этом в конце вьмитания нам не пришлось бы тратить лишнее время на добавление единицы младшего разряда к обратному коду первоначального результата (п. (д) основного алгоритма - см. стр. 291).

Когда счет идет по модулю 1, то целое количество единиц автоматически вьиитается из результата в тех случаях, когда результат больше или равен единице; это происходит просто за счет того, что разряды целых в машине отсутствуют. Если мы решим вести счет по модулю 1-2 , то нам придется в определенных случаях отбрасывать от результата суммирования эту величину. Заметим, однако, что теперь сама величина модуля (1-2 ) помещается в разрядной сетке машины (в то время как модуль 1 в разрядной сетке не помещался); поэтому вьиитание модуля из результата суммирования нужно теперь производить не при условии, что результат больше или равен модулю, а только при условии, что результат строго больше модуля. Так как вес младшего разряда есть 2 , то ближайщее-большее число к величине 1-2 * есть 1; если некоторое число строго больше величины 1-2 * , то это значит, что оно больше или равно 1. Таким образом, выполняя суммирование по модулю 1-2~ , мы должны отбрасывать величину этого модуля в тех й только тех случаях, когда результат больше или равен 1, т. е. когда получается единица переноса из старшего разряда сумматора влево - в несуществующий разряд с весом 1. Условие, при котором из результата суммирования следует вычитать модуль, оказывается точно таким же, как при сче-. те по модулю 1.

Но при счете по модулю 1 игнорирование единицы переноса из старшего разряда сумматора как раз и было эквивалентно вьиитанию модуля. Теперь же потеря единицы переноса из старшего разряда приводила бы к вычитанию

*) Напомним, что обратный код числа а.как раз и представляет собой дополнение от а до числаО,111...Н,т. е. величину (1-2 ) -а.



из результата единицы, а не 1-2 , как требуется. Исправить э(ГО положение можно введением цепи кругового {циклического) переноса. Если сумматор устроить так, чтобы сигнал переноса из старшего разряда поступал на вход переноса младшего разряда сумматора, то каждый раз, когда результат суммирования больше или равен 1, к результату одновременно с вычитанием 1 будет добавляться величина 2 (единица младшего разряда), так что в итоге результат окажется уменьшенным на величину 1-2 , как это и требуется.

О том, что параллельные сумматоры часто строятся с цепью кругового переноса, мы уже упоминали в 2.1, а на рис. 2-1 даже показали пунктиром эту цепь.

Ясно, что в последовательном сумматоре осуществить круговой перенос невозможно. В параллельном же сумматоре при наличии цепи кругового переноса установление сигналов переноса по всем разрядам занимает, как правило, время не больше тт, где т - количество разрядов, Т - задержка переноса на разряд,- столько же, сколько в обычном параллельном сумматоре. Это видно из следующего примера:

,.1111 1111

0 0 0 1 оооо

(t)(l)(l)(l) .

(начало

распространения переносов)

круговой перенос

i(l)(l)(l)(l)(l)

(окончание распространения gt; переносов)

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



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