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 оборота барабана (по V2 оборота на каждое обращение - при случайном расположении адресов), то это и не такой уж плохой результат. Зато арифметическое устройство отличается едва ли не предельной экономичностью: трудно себе представить, что можно было бы сделать с меньшим количеством оборудования.

4.7. Умножение чисел с учетом алгебраических знаков и чисел с плавающей запятой

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

4.7.1. Об умножении чисел с учетом алгебраических знаков. Если для изображения отрицательных чисел используется прямой код, то учет алгебраических знаков при умножении не связан с какими-либо существенными трудностями. В этом случае обычно с абсолютными величинами чисел операции производятся отдельно, по тем правилам, которые были изложены ранее, и отдельно по общим правилам формируется знак произведения. Затруднения с выполнением умножения возникают тогда, когда для изображения отрицательных чисел применяются обратный или дополнительный коды. Этим вопросом мы сейчас и займемся.

Наиболее естественным на первый взгляд представляется следующий путь: если один или оба сомножителя отри-



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

Представим себе, например, что множительное устройство параллельного типа построено в соответствии с рис. 4-2, а (стр. 350), а умножение осуществляется без применения каких-либо методов ускорения в соответствии с 1-м вариантом, описанным в 4.1.2. До начала умножения сомножители размещаются в регистрах Л и С, а регистр В погашен. Обращение кода множимого (в регистре С) до начала умножения, если это необходимо, можно выполнить без особого труда, поскольку цепи для обращения кодов в регистре С имеются такили иначе (для выполнения вычитания, сравнения и других операций); для выполнения аналогичной операции с множителем в регистре Л такие цепи пришлось бы предусмотреть специально. Если применяются не обратные, а дополнительные коды, то для получения прямого кода нужно произвести не только обращение, но и добавление единицы младшего разряда. С этой целью нужно либо предусматривать специальные цепи в регистрах Л и С, либо передавать по очереди сомножители в регистр В, выполнять добавление единицы через сумматор и затем возвращать полученные коды в свои регистры. Еще сложнее будет найти дополнительный код от произведения. Произведение, как мы помним, содержит вдвое больше разрядов, чем каждый из сомножителей, и размещается в двух регистрах: младшая часть - в регистре Л, старшая часть - в регистре В, Нахождение дополнительного кода от него должно было бы состоять из обращения кодов в регистрах Л и 5 и добавления затем единицы младшего разряда в регистр Л; при этом возможен случай, когда при добавлении единицы возникнет перенос из старшего разряда регистра Л в младший разряд регистра 5. Для выполнения таких операций нужно либо иметь довольно сложные специальные цепи в регистрах А и В, либо, может быть,



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

Трудности аналогичного рода могут встретиться на этом пути и при использовании других множительных устройств и других методов умножения из числа описанных ранее. Поэтому умножение с учетом алгебраических знаков при использовании дополнительных кодов выполняется обычно одним из искусственных приемов, которые мы рассмотрим ниже. Аналогичные приемы - в несколько упрощенной форме - могут применяться и при использовании обратных кодов для изображения отрицательных чисел, но последующее изложение будет вестись применительно к дополнительным кодам. Для определенности будем полагать, что дополнительный код строится по первому варианту (см. 1.4.2),т. е. что положительные числа содержат в разряде знака laquo;О raquo;, а отрицательные - laquo;1 raquo;; как и прежде, будем считать, что запятая фиксирована перед старшим из основных разрядов числа (таким образом, все числа дробные, вес знакового разряда равен - 1 вместо естественного для этого места веса -j-l).

4.7.2. Умножение в дополнительных кодах с двумя корректирующими шагами. Представим себе для определенности, что множительное устройство построено в соответствии с рис. 4-2, а (стр. 350) и что умножение абсолютных величин вьшолняется обычным методом в первом варианте (см. 4.1.2). Это предположение делается для удобства последующего изложения, но вообще описываемые ниже способы годятся и при других построениях множительных устройств. Обозначим сомножители через а и с, а их абсолютные величины - через \а \ и с. Если некоторый со--множитель, скажем а, положителен, то в его основных разрядах (без разряда знака) содержится величина \а\, если же он отрицателен, то в его основных разрядах содержится величина 1 - \а\ (дополнение от величины \а\ до единицы).



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