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

Б дальнейшем тоже рассматриваются только те случаи, когда указанное соотношение между sap справедливо.

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

Некоторые трудности представляет отсчет количества сдвигов иопределение конца сдвигов. Если бы в регистрах мантиссы имелись цепи для сдвига на 1, 2, 4, 8 и т. д. разрядов (речь идет о параллельных регистрах), то тогда первый (младший) разряд разности порядков управлял бы цепью сдвига мантиссы на 1 разряд, второй разряд разности порядков - цепью сдвига на 2 разряда, третий - цепью сдвига на 4 разряда и т. д. Максимальное количество тактов сдвига равнялось бы примерно logg s, где s - количество основных разрядов в мантиссе. Однако во многих случаях в регистрах мантиссы имеются только цепи сдвига на 1 разряд. При этом для отсчета количества сдвигов можно поступить, например, следующим образом.

Пусть в схеме управления имеется двоичный счетчик, содержащий такое количество разрядов q, чтобы 2 было больше максимально допустимого количества сдвигов в мантиссе. Например, если количество основных разрядов в мантиссе s равно 26, а сдвиги блокируются при условии, что разность порядков преБЬШ1ает 32, т. е. при наличии единицы в 6-м разряде разности порядков, то счетчик должен содержать 5 двоичных разрядов. Заметим, что количество основных разрядов в порядках р больше или равно количеству разрядов счетчика.

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



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

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

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

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

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



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

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

3.2.3. Детали выполнения сложения-вычитания мантисс. В отличие от порядков, при изображении которых большей частью применяются дополнительные коды, для изображения мантисс используют большей частью прямые коды. Связано это как с тем, что при выполнении умножения и деления мантиссы чисел приходится перемножать или делить, так и с тем, что применение здесь прямых кодов не ведет к такому удлинению операций сложения и вычитания, как для чисел с фиксированной запятой.

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

Во-вторых, при выполнении вычитания мантисс в прямых кодах почти всегда заранее известно, какая из мантисс больше по абсолютной величине. Поскольку исходные числа нормализованы, абсолютные величины и: мантисс в начале операции заключены в интервале (1, VaJ gt; если при выравнивании порядков одна из мантисс была сдвинута хотя бы на разряд вправо, то она стала по абсолютной величине меньше, чем Va, и, следовательно, наверняка меньше, чем мантисса другого числа. Поэтому выполнение вычитания мантисс нужно всегда начинать с обращения кода



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