Конспект лекций по дискретной математикеРефераты >> Математика >> Конспект лекций по дискретной математике
2) В качестве результата деления формируется как частное так и остаток .При этом как правило остаток замещает старшие разряды ,а частное младшие.
3) В целях экономии оборудования на каждом шаге осуществляется не сдвиг делителя вправо относительно остатка ,а сдвиг остатка влево относительно неподвижного делителя. При этом делитель совмещается со старшими разрядами делимого ,а далее остатка.
4) При получении отрицательного остатка на каком либо шаге для перехода к следующему шагу требуется восстановление остатка путем сложения с делителем. Подобный метод называется делением с восстановлением остатка .В целях экономии времени деление как правило реализуется в ЭВМ с применением метода без восстановления .В соответствии с этим методом при получении отрицательного остатка он не восстанавливаясь сдвигается влево так же как и положительный однако при этом на следующем шаге производится не вычитание делителя ,а сложение с делителем.
Доказательство:Допустим на i-м шаге получен отрицательный остаток тогда по методу с восстановлением :Ri+1=2(Ri+B)-B
Ri+1 =2Ri +2B-B=2Ri+B
5) При некоторых соотношениях между делимым и делителем может оказаться что частное не помещается в отводимый формат. Подобная ситуация возникает также при делении на 0. Этот особый случай распознается на начальном шаге деления и приводит к прерыванию выполняемой программы по причине ошибки деления.
Деление беззнаковых.
А/В<2^n А-В*2^n<0 из этого неравенства следует что для проверки корректности деления необходимо вычесть делитель из старших разрядов делимого. Если результат вычитания положителен или равен 0 то операция прекращается выходом на прерывание. В остальном беззнаковое деление реализуется по описанным выше принципам так как цифра частного вырабатываемая на каждом шаге деления определяется знаком текущего остатка ,точнее представляет собой инверсию его знакового разряда, целесообразно расширить n-разрядный сумматор дополнительным разрядом для явного представления знака остатка.
Если по завершению всех шагов деления остаток является отрицательным то требуется его восстановление путем сложения с делителем.
Деление знаковых.
IDIV
По аналогии с операцией умножения знаковое деление может быть реализовано одним из двух методов:
1) Метод деления в прямых кодах .
2) Метод деления в дополнительных кодах.
При использовании первого метода отрицательные операнды предварительно преобразуются в прямой код и далее над ними выполняют деление по аналогии с беззнаковым .Знак частного формируется отдельным действием как сумма по модулю два знаков операндов. Знак остатка совпадает со знаком делимого. Исключением из этого правила является нулевой остаток содержащий в знаковом разряде 0.
Отрицательные результаты в конце операции преобразуют из прямого в дополнительный код.
Существенным отличием деления модулей операндов в прямых кодах от беззнакового деления является проверка корректности деления. Действительно модуль n-разрядного знакового числа размещается в (n-1)-разряде в связи с этим условие корректности для деления в прямых кодах имеет вид |A|/|B|<2^(n-1) ; |A|-|B|^(n-1)<0
В соответствии с последним неравенством пробное вычитание модулей с целью проверки корректности должно выполнятся путем совмещения делителя не со старшими разрядами делимого ,а со сдвинутыми на один разряд вправо.
В целях однообразия выполнения пробного вычитания с основным циклом деления в котором делитель совмещен со старшими разрядами остатка делимое предварительно сдвигают на один разряд влево после чего производится пробное вычитание из старших разрядов сдвинутого делимого.
Деление в дополнительных кодах.
Основное отличие этого метода от предыдущих состоит в том, что операнды вступают в операцию в коде своего представления вместе со знаком. Однако при этом возникает ряд нюансов :
1) Цифры частного, в том числе и знак, формируемые на каждом шаге, определяются не только остатком, но и знаком делителя. При их совпадении цифра частного равна единице, иначе - нулю.
2) Действие выполняемое над текущим остатком на каждом шаге определяется не только этим остатком, но и знаком делителя. При их совпадении выполняется вычитание делителя из старших разрядов делителя, при не совпадении выполняется сложение делителя со старшими разрядами делителя.
3) Коррекция остатка производится в конце операции в том случае, если его знак не совпадает со знаком делимого. Эта коррекция осуществляется действием над остатком, аналогичным основному циклу деления.
4) Коррекция частного выполняется только при отрицательном делимом и нулевом остатке деления и состоит в инкременте (увеличение на единицу) положительного частного и декременте отрицательного.
5) Проверка корректности деления выполняется также как при делении прямых кодов только в случае положительных операндов.
1) A>0, B>0 => A/B<2n-1 A-B*2n-1<0
2) A<0, B<0 => A/B<2n-1 A-B*2n-1>0
3) A<0, B>0 => A/B³-2n-1 A/B>-2n-1 A+B*2n-1+B>0
4) A>0, B>0 => A/B>-2n-1-1 A+B*2n-1+B<0
При одинаковых знаках операндов для проверки корректности деления необходимо сдвинуть делимое на 1 разряд влево а затем вычесть делитель из его старших разрядов.
Проверка корректности осуществляется сравнением знака первого остатка со знаком делимого. Если они НЕ совпадают деление корректно, в противном случае - не корректно.
При разных знаках пробное вычитание фактически заменяется сложением.
В этом нет ничего необычного, так как для первого шага в качестве остатка для первого шага фигурирует само делимое и его знак не совпадает со знаком делителя в соответствии с действиями для основного цикла над текущим остатком в этом случае необходимо выполнять сложение с остатком.
В связи с тем, что при разных знаках операндов получается отрицательное, имеющее диапазон, больший на единицу, чем положительное, начальные шаги, связанные с проверкой корректности деления содержат такую последовательность действий :
1) Сложение делимого с делителем, совмещенным с его младшими разрядами. При этом выполняется знаковое расширение делимого на старшие разряды делителя.
2) Сдвиг полученного остатка на один разряд влево.
3) Сложение с делителем, совмещенным со старшими разрядами остатка.
4) Сравнение знака остатка со знаком делимого выполняется также как и для операндов с одинаковыми знаками.
В связи с тем, что при проверке корректности деления используется знак делимого необходимо при схемной реализации предусмотреть его сохранение до конца операции. По результату пробного вычитания формируется старшая цифра частного, интерпретируемая как знак.
Действительно, при корректном делении получается верный знак частного.
Пример : A=-168 B=-14 n=5
A=1101011000 ; B=10010
Выполняемые действия
N шага |
обозначения |
A/R (старшие) |
A/C (младшие) |
0 |
A ¬ A B R0 |
11010 -10101 10010 ¾¾¾ 00011 sign R0¹sign B® |
11000 10000 1000|0 ®® |
1 |
¬ R0 B R1 |
+00111 10010 ¾¾¾ 11001 sign R1=sign B |
000|00 000|01 |
2 |
¬ R1 B R2 |
+10010 10010 ¾¾¾ 00000 sign R2¹sign B® |
00|010 00|010 ®® |
3 |
¬ R2 B R3 |
+00000 10010 ¾¾¾ 10010 sign R3=sign B |
0|0100 0|0101 |
4 |
¬ R3 B R4 |
-00100 10010 ¾¾¾ 10010 sign R3=sign B |
01010 01011 |
псевдо- коррекция |
R4 B R |
-10010 10010 ¾¾¾ 00000 | |
коррекция частного |
+01011 1 ¾¾¾ 01100 |