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

новки вычислений или формирования сигнала ошибки. Но важно еще получить X правильный знак разности.

Применяя дополнительные коды, построенные по 1-му варианту ( laquo;о raquo; соответствует знаку laquo;+ raquo;, laquo;1 raquo; - laquo;- raquo;), можно поступить следующим образом. Добавим по одному лишнему разряду в регистрах В и С и в сумматоре - слева от знакового разряда; в последовательном устройстве вместо добавления лишнего разряда в сумматоре нужно добавить, лишний такт суммирования. Если при приеме исходных чисел установить в добавочных разрядах такие же цифры, как в разрядах знака, то дальше можно считать, что бывший знаковый разряд является обычным разрядом целых со своим естественным весом --1,а добавочный разряд - это новый разряд знака с весом -2. При этом в любом случае, в том числе и при переполнении прежней разрядной сетки (без добавочного разряда), в добавочном разряде получим правильный знак разности. Точно таким же образом мы поступали в 3.2.2, при вычислении разности порядков чисел с плавающей запятой.

Интересна и другая возможность. Переполнение разрядной сетки при вычитании возможно лишь в том случае, если знаки исходных чисел В и С различны. Но при этом знак разности В - С всегда совпадает Со знаком исходного числа В. Следовательно, в начале сравнения можно проверить, каковы знаки сравниваемых чисел, и если они различны, то вообще не делать никакого вычитания; о результате сравнения можно судить сразу по знаку В *).

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

Теперь относительно другой трудности, о которой мы говорили выше.

*) В прямых кодах тоже можно сократить операцию таким образом. Но нужно учитывать, что исходными числами разных знаков могут быть, в частности, -f-0 и -0.



Обнаружение равенства исходных чисел при операциях в прямых кодах можно осуществить, например, следующим путем.

После того как закончено вычитание, подадим на один из входов сумматора разность В - С, на другой - число laquo;П1...11 raquo;и выполним суммирование. (Число П1...П можно получить, например, погасив один из входных регистров, т. е. установив в нем код ООО...00, и затем выполнив в нем обращение кода).

При выполнении суммирования {В - С)+(.П1...П) обратим внимание на сигнал переноса из самого старшего разряда. Если среди цифр, изображающих величину В - С, имеется хотя бы одна единица, то появится единица переноса из старшего разряда.

Отсутствие сигнала переноса на выходе старшего разряда указывает, что все основные разряды регистра В содержат нули.

Это, правда, еще не значит, что разность В - С наверняка равна нулю. Если; например В = +V2) а С = -Va. то - С = 1, и все основные разряды регистра В (дробная часть величины В - С) тоже содержат нули. Но в подобных случаях имелось переполнение разрядной сетки в ходе вычитания.

Итак, признаком равенства исходных чисел {В = С; В - С = 0) является одновременно отсутствие переполнения разрядной сетки при вычитании и отсутствие переноса единицы из старшего разряда при дополнительном суммировании.

При выявлении равенства сравниваемых чисел можно искусственно установить, скажем, знак laquo;- raquo; в результате вычитания, так что к концу операции сравнения laquo;- raquo; в разряде знака результата означал бы В С, а laquo;-[- raquo; В gt; С. Если необходимо, то можно сформировать специальный ответ сравнения в случае В = С.

Обнаружение равенства можно выполнить иными, может быть, более удобными методами, если в параллельном сумматоре возможно отделить формирование цифр переноса от формирования цифр суммы (такой сумматор рассматривался нами в связи со вторым методом сложения-вычитания в прямых кодах - см. 3.1.2). При этом можно действовать, например, следующим образом.



Равные числа, если они появятся, должны иметь, между прочим, и одинаковые Цаки *). Поэтому, когда в ходе выполнения сравнения будет производиться их вычитание- скажем, по первому методу (3.1.1),- то перед суммированием будет произведено обращение кода В, а во время суммирования от схемы управления будет послана единица на вход переноса младшего разряда сумматора. При этом наличие единицы на выходе переноса старшего разряда свидетельствовало бы о том, что \B\ lt;i \С\ (так как (1- В) ---[- \С\ gt; 1), а нуль на выходе переноса старшего разряда означал, бы, что \В\ gt; \С\ (так как (1 - \В\) + \С\ lt; 1). Если образование цифр переноса обнаруживает случай \В\ lt; \С\, то можно вместо формирования цифр суммы вновь повторить процесс образования переносов, но при этом не подавать единицу на вход переноса младшего разряда; вместо суммирования (1 - 1В) И- С будет как бы выполняться суммирование (1-2- - \В\) -\- \С\, где 2- - вес младшего (т-го) разряда, а 1-2- * - \В \ - обратный код величины \В\. Ясно, что в случае В lt; [CI при таком суммировании тоже возник бы перенос из старшего разряда, так как минимальная разница между \С\ и В есть 2- ; если же = \С\, то (1-2- - В) + С lt; 1, и без единицы на входе переноса младшего разряда перенос на выходе старшего разряда не возникает. Таким способом при одинаковых знаках В к С можно обнаружить равенство их абсолютных величин; это будет свидетельствовать о том, что числа В и С вообще равны между собой.

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

*) Исключение составляют только + О или - 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