Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
с. работа - Логика.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
2.16 Mб
Скачать

4.11. Деление чисел в дополнительном коде

Так же как и при умножении, здесь возможны два пути;

1) перевод операндов в прямой код, получение частного обычным способом и перевод его в дополнительный код перед записью в память;

2) деление операндов в дополнительном коде с получением част­ного в требуемом виде.

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

1) делимое в процессе операции участвует всего лишь один раз, а дальше текущие остатки получаются автоматически;

2) нетрудно организовать получение цифр дополнительного кода отрицательного частного непосредственно в процессе деления путем передачи знаковых цифр остатков из СМ в регистр частного напрямую, минуя БИЦ.

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

1. А>0; В>0; Y=A/B >0

Деление производится как обычно: знак частного определяется путем сложения знаковых цифр операндов по модулю 2 и одновременно формируется дополнение модуля делителя до двух. Цифры частного получаются, как уже известно, путем инвертирования знако­вых цифр остатков от деления в БИЦ.

2. A<0; В>0; Y=A/B <0

Ход деления обычный с учетом следующих особенностей.

Псевдознаковая цифра частного (сигнал о возможном переполне­нии разрядной сетки) должна получаться в этом случае равной знаковой цифре первого остатка, так как здесь производится вычита­ние модуля делимого из модуля делителя в силу исходного сочетания знаков операндов. Значит знаковая цифра нулевого остатка должна поступать в регистр частного, минуя БИЦ, т. е. не инвертируясь.

Так как знак нулевого остатка имеет инверсное значение, то при продолжении деления обычным путем все другие остатки получаются также с инверсными знаками. Значит, в регистр частного также будут записываться инверсные цифры и в конце деления в нем образуется обратный код отрицательного частного. Для округления резуль­тата из него надо вычесть единицу (п + 1)-го разряда, а для перевода его в дополнительный код к нему надо прибавить единицу в n-й раз­ряд. Тогда прибавление единицы в (n + 1)-й разряд произведет сум­марное действие округления и перевода обратного кода в дополни­тельный.

3. А > 0; В < 0; Y = А/В < 0.

Этот случай является зеркальным отображением предыдущего: псевдознаковая цифра частного получается как обычно путем инвер­сии знака первого остатка, а для того чтобы получить инверсные цифры частного, нужно брать их равными знаковым цифрам соответ­ствующих остатков без инвертирования их в БИЦ В конце деления необходимо добавить к (п+ 1)-му разряду частного единицу для одновременного выполнения округления результата и перевода его в дополнительный код.

4. A<0; B<0; Y=A/B >0

В этом случае все цифры частного (включая псевдознаковую} должны быть равны знаковым цифрам соответствующих остатков. На первом этапе деления одновременно с определением истинного знака частного определяется величина модуля делителя, т.е. возни­кает ситуация, сходная с начальными условиями 2-го случая. Зна­чит, псевдознаковая цифра частного определяется значением зна­ковой цифры первого остатка. Если далее производить деление обыч­ным путем, то, как уже известно из 2-го случая, будут получаться инверсные цифры модуля частного. Следовательно, знаковые цифры остатков надо посылать в регистр частного, минуя БИЦ, так как частное здесь должно быть положительным и его дополнительный код совпадает с прямым.

Таким образом, деление чисел, представленных в дополнитель­ном коде, производится в 3 этапа.

На первом этапе определяется знак частного путем сложения зна­ковых цифр операндов по модулю 2.

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

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

Пример. A<0, В>0; Y < 0. Заданы [A]Д =1,011; [В]Д = 0,110.

I. Определяется знак частного 1  0 = 1 и обращается делитель 2 - B= 1,010.

II. Проверка па переполнение (нулевой шаг)

1,011 + 0,110 = 0,001.

Псевдознак модуля частного равен знаку первого остатка, так как делимое от­рицательное, т.е. псевдознак частного равен 0.

III. Определяются значащие цифры частного обычным путем.

1-й шаг 0,001 1-й остаток 0,0 0 1 0 = [Y]0

0,010 1-й сдвиг

+ 1,010 2-е сложение

1,100 2-й остаток

2-й шаг 1,000 2-й сдвиг

+ 0,110 3-е сложений

1,110 3-й остаток

3-й шаг 1,100 3-й сдвиг

+ 0,110 4-е сложение

0,010 4-й остаток

4-й шаг 0,100 4-й сдвиг

+ 1,010 5-е сложение

1,110 5-й остаток

Производим округление результата и переводим его в дополнительный код:

[Y ] 0= 1,0010

+1

[Y]Д = 1,0011 [Y]Д окр.= 1,001

Пример. А>0; В<0, Y < 0. Заданы [А]Д = 0,101; [В]Д= 1,010.

I. Знак частного 0  1 = 1. Модуль делителя | В | =0,110.

II. Псевдознаковая цифра частного равна обратной величине знака первого ос­татка, так как делимое положительное

0,101 + 1,010= 1,111.

Псевдознак частного равен 0.

III. Значащие цифры частного определяются знаками остатков, так как делатель отрицателен.

1-й шаг 1,111 1-й остаток 0,0 0 1 0 = [Y]0

1,110 1-й сдвиг М

+ 0,110 2-е сложение

0,100 2-й остаток I

2-й шаг 1,000 2-й сдвиг

+ 1,010 3-е сложение

0,010 3-й остаток

3-й шаг 0,100 3-й сдвиг

1,010 4-е сложение

1,110 4-й остаток

4-й шаг 1,100 4-й сдвиг

+ 0,110 5-е сложение

0,010 5-й остаток

Производим округление частного и перевод его в дополнительный код:

[Y ] 0= 1,0010

+1

[Y]Д = 1,0011 [Y]Д окр.= 1,001

Пример. A<;0, В<0,Y > 0. Заданы [A]Д =. 1,011; [B]Д= 1,010.

I. Знак частного 1  1 = 0.

Модуль делителя | В | = 0,110.

II. Псевдознак модуля частного равен знаку первого остатка, так как делимое отрицательное

1,001 + 0,110 = 0,001

Псевдознак частного равен 0.

III. 1-й шаг 0,001 1-й остаток 0,1 1 0 1 = [Y]о

0,010 1-й сдвиг

+ 1,010 2-е сложение

1,100 2-й остаток

2-й шаг 1,000 2-й сдвиг

+ 0,110 3-е сложение

1,110 3-й остаток I

3-й шаг 1,100 3-й сдвиг

+ 0,110 4-е сложение

0,010 4-й остаток

4-й шаг 0,100 4-й сдвиг

+ 1,010 5-е сложение

1,110 5-й остаток

Округление частного [Y]Д = 0,111

Таким образом, алгоритм деления чисел в дополнительных кодах сводится к следующему. На каждом шаге деления производится алгебраическое сложение кода текущего остатка {на нулевом шаге делимого) и кода делителя, которому присваивается знак, противоположный знаку текущего остатка (делимого). При этом, если знаки вновь полученного остатка и делителя одинаковы, то в текущий разряд частного записывается единица, в противном случае — ноль. После этого вновь полученный остаток и частное сдвигаются на один раз­ряд влево. Деление прекращается после вычисления (п + 1)-го раз­ряда частного, в который прибавляется единица округления. При таком алгоритме деления и условии, что| А |< | В|, знак частного полу­чается автоматически, а код модуля частного соответствует его знаку.

каждый остаток Ri (последний остаток R4 =r0, r1 r2 r3) представлены в дополнительном коде. Предполагается, что делимое и делитель явля­ются положительными нормализованными дробями. Поэтому частное Y = у1, у2 у3 у4 есть положительное число, лежащее в диапазоне 1/2 < Q<2, т. е. у1 — целая часть числа. Каждая цифра частного уi явля­ется управляющим сигналом для следующей строки матрицы, опреде­ляющим, какую операцию (сложение или вычитание) нужно выпол­нять в этой строке. Вычитание, как видно из рис. 4.14 и рис. 4.15, выполняется путем формирования дополнительного кода делителя.