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

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

РегистрА

igcmme йз аниматора

Регистр В

Частное ) рег/

.Номандоприеы г частного Въ-ый - разряд (Ы.г.-.1Щ

\ В схеме управления

Ci/мматор

Цинличесний перенос

НоманЗа. Воманда

ВыВатьсуммуВ в

сиг-переноса.

Регистре

(етабращения iiaila mcatasa траванаф

Сддиг па польци

Команда., оВр по в С Команда сдВиг С Вправо

Рис. 5-2. Модификация схемы рис. b-i, б.

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



on будет идти правильно, несмотря на то, что в perncTpalx В и С младшие разряды чисел поставлены впереди старших: цепь переносов все равно замкнута в кольцо (циклический перенос). Единственное неудобство состоит в том, что в прежней схеме об исходе сравнения мы могли судить всегда по сигналу из одного и того же места (с выхода переноса старшего разряда сумматора), теперь же в каждом цикле старший разряд передвигается по сумматору на одну позицию вправо. В схеме управления поэтому необходимо предусмотреть специальное устройство, которое отсчитыва ло бы циклы деления и в зависимости от номера цикла выбирало бы сигнал с нужного разряда цепи переносов. Зато можно отказаться от цепей сдвига в регистре Л и цифры частного передавать каждый раз прямо в соответствующий разряд А.

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

3 deg;. Описанный алгоритм вьшолнения деления, независимо от того в каком варианте он реализуется, удобен только для параллельных устройств и только в том случае, когда построение сумматора позволяет отделить процесс формирования сигналов переноса от вьщачи суммы в регистр В.

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

Потери времени на восстановление остатков можно избежать, применяя второй способ вьшолнения деления, который назьшается делением, без восстановления. Реализация этого способа также возможна в двух вариантах, аналогично тому как реализуется первый способ (см. рис. 5-1,с и



5-t,6), но модернизацию второго варианта, показанную на схме рис. 5-2, осуществить затруднительно. Правило выполнения деления сформулируем применительно к первому варианту его реализации:

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

(б) удвоить предыдущий остаток;

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

(г) повторять (б) и (в) до тех пор, пока не будут получены все цифры частного.

В качестве обоснования этого метода заметим, что если, например, в первом шаге разность В - С (где В - делимое, С - делитель) оказалась отрицательной, то это значит, что В lt;С я, следовательно, первая цифра частного есть нуль; после удвоения этой разности получим 2В - 2С, а добавле-ние делителя дает 2В - 2С + С = 2В - С; если и эта величина отрицательна, то 2В lt;; С, и вторая цифра частного тоже нуль; после очередного удвоения получим величину 4В -- 2С, а последующее добавление С даст 4В - 2С + -\- С = 4В - Си т. д. Если, скажем, 4В - С gt; О, то третья цифра частного есть единица, а полученный остаток в точности совпадает с тем, который получился бы при выполнении деления первым способом; вообще каждый раз, когда остаток неотрицателен, он получается в точности таким же, как соответствующий остаток при выполнении деления первым способом.

Пример (ср. с примером на стр. 493).

15/32 : 3/4 = 5/8, 15/32 = .01111, 3/4 = .11000, 5/8 = .10100.



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