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

6.5. Деление чисел в д-кодах

Деление десятичных чисел обычно выполняется в прямых Д- кодах. Знак частного определяется так же, как и при двоичном деле­нии, поэтому в дальнейшем рассмотрим деление положительных деся­тичных дробей. Из двух возможных способов деления двоичных чисел для деления десятичных чисел целесообразно применять только спо­соб при неподвижном делителе и сдвиге остатков и частного влево. При двоичном делении в каждом такте получалась очередная цифра частного, которая принимала одно из двух возможных значений (0 или 1). Для определения этой цифры делитель вычитался из дели­мого на нулевом шаге и сдвинутого влево на один разряд очередного остатка на последующих шагах. При десятичном делении количество вычитаний делителя из сдвинутого очередного остатка, как правило, больше 1, так как разряды частного могут принимать значения от 0 до 9. Так же как и при умножении, на сумматоре слева от запятой должно быть пять двоичных разрядов: самый левый — знаковый, где фиксируется знак остатка, и еще одна тетрада, в которую может сдвигаться старшая цифра текущего остатка при его сдвиге влево. Справа от запитой в сумматоре должна быть (п + 1) тетрада, млад­шая из которых используется только для округления частного. В ре­гистре делителя справа от запятой должно быть п тетрад. Регистр частного должен быть с левым сдвигом и иметь (п + 1) тетраду. При­чем младшая тетрада должна представлять собой реверсивный счет­чик, в котором формируется очередная десятичная цифра частного при выполнении очередного шага деления. Всех циклов деления долж­но быть п + 2, так как в первом цикле получается цифра слева от запятой, а справа от запятой необходимо сформировать п +1 цифру с учетом разряда округления. Если на первом шаге цифра частного не равна 0, то частое вышло за пределы разрядной сетки, т. е. опе­рация не корректна. При выполнении каждого шага деления к счетчику тактов прибавляется 1. а операция завершается после выполне­ния (п + 2) циклов.

В исходном состоянии делимое находится в сумматоре, делитель — в регистре делителя, а регистр частного установлен в состояние 0. Деление начинается с вычитания делителя из делимого на нулевом шаге и из сдвинутых остатков— на последующих шагах. Вычитание на каждом шаге заменяется сложением в дополнительном Д- коде и производится до тех пор, пока не получится отрицательный остаток. При этом каждый раз при получении положительного остатка добавляется единица в специальный счетчик, где накапливается очеред­ная цифра частного. Затем осуществляется сдвиг остатка на четыре двоичных разряда к прибавление к нему делителя до тех пор, пока не получится положительный остаток. Количество сложений (без по­следнего) является дополнением соответствующей цифры частного до 9, что заносится в счетчик очередной цифры частного.

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

Пример. Разделить число А = 0,154675 на число В = 0,55. Так как А < В, на нулевом шаге остаток должен получиться отрицательным, т. е. операция коррект­на. Далее рассмотрим только цифровую часть чисел

1-й шаг _ 154675 СЧ: = 0 y1 = 0

55000

_ 99 675 СЧ: =0+1 y1 = 1

55 000

_ 44 675 СЧ: =1+1 y1 = 2

55 000

- 89 675 y1 = 2

Остаток < 0. Сдвиг частного влево и делителя вправо (или остатка влево).

2-й шаг 89 675 СЧ : = 0 y2 = 9

+ 5500

95175

+ 5500 СЧ : =9-1 y2 = 8

00675 y2 = 8

Остаток > 0. Сдвиг частного влево и делителя вправо на 4 двоичных разряда,

3-й шаг _ 00675 СЧ: = 0 y3 = 0

550

_ 00125 СЧ: =0+1 y3 = 1

550

99575 y3 = 1

Остаток <0. Сдвиг частного влево и делителя вправо на 4 двоичных разряда. И так далее.

Таким образом, У = А/В = 0,281.

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

Допустим, при делении А на В получено частное в виде Y = 0,y1y2 ... yп.

Тогда А = В (y1 2 -1 + y2 2 -2 + ... + yn 2 –n) + Rn, где Rnоста­ток от деления.

Положим Rn = 0 и у1 = 1, y2 = y3 = ... = 0. Тогда остаток на пер­вом шаге

R1 = А — 2 -1 В.

Если R1> 0, то у1 = 1; если R1 < 0, то у1 = 0. В последующем случае восстанавливается предыдущий положительный остаток. За­тем примем, что y2 = 1, а остальные yi = 0 и т. д. Остаток на

n

любом шаге составит Ri = А — В Σ yi 2 -i. Следует учесть, что при сдвиге чисел, представленных в

i=1

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

Пример. Заданы А = 0,2425; В = 0,5200. Найти Y = А/В.

Делитель В на i-м шаге

Сумматор (СМ)

Примечание

Цифры

0,5200

0,2600

0,1300

0,0650

0,0325

0,0162

0,0081

0,2425

- 0,2600

9,9825

+ 0,2600

0,2425

- 0,1300

0,1125

- 0,0650

0,0475

- 0,0325

0,0150

0,0150

- 0,0162

9,9938

+ 0,0162

0,0150

- 0,0081

0,0069

и т.д.

В 2 –1; СМ= [CM] – B 2 –1

R<0

Восстановление R1 т.е.

R1 + B 2 –2

В 2 –2; СМ= [CM] – B 2 –2

R2 >0

В 2 –3; R2B 2 –3

R3 >0

В 2 –4; R3B 2 –4

R4 >0

В 2 –5; R4B 2 –5

R5 <0

Восстановление R5

В 2 6; R4B 2 6

R6 >0

у1 = 0

у2 = 0

у3 = 0

у4 = 0

у5 = 0

у16 = 0

Таким образам, Y = 0,011101.