
- •1.4. Алфавитное представление и преобразование информации
- •Глава 2
- •2.1. Непозиционные системы счисления
- •2.2. Позиционные системы счисления
- •Неоднородные позиционные системы счисления
- •Однородные позиционные системы счисления
- •2.3. Кодированные позиционные системы счисления
- •2.4. Системы счисления специального назначения
- •2.6. Символические системы счисления
- •2.7. Перевод чисел из одной системы счисления в другую
- •Перевод целых чисел из одной позиционной системы счисления в другую
- •2.8. Выбор системы счисления для применения эвм
- •2.9. Двоичная система счисления
- •2.10. Представление двоичных чисел в эвм
- •2.11. Точность представления чисел в эвм
- •Глава 3
- •3.1. Основные понятия
- •3.2. Операция алгебраического сложения в эвм
- •3.3. Операция сдвига
- •3.4. Сложение чисел в машинах с плавающей запятой
- •8.5. Округление чисел в эвм
- •3.6. Точность выполнения операций в машине с плавающей запятой
- •3.7. Вычисления с двойной точностью
- •Глава 4
- •4.1. Общие сведения об операции умножения
- •4.2. Умножение, выполняемое методом накопления частичных произведений
- •4.3. Сравнение схем умножения методом накопления
- •4.4. Методы ускорения операции умножения
- •4.5. Умножение чисел, заданных в дополнительном коде
- •4.6. Умножение чисел в машинах с плавающей запятой
- •4.7. Особенности выполнения операции умножения в современных эвм
- •4.8. Деление чисел с восстановлением остатков
- •4. 9. Деление без восстановления остатков
- •4.10. Машинные схемы деления
- •4.11. Деление чисел в дополнительном коде
- •4.13. Деление чисел в машинах с плавающей запятой
- •Глава 6
- •6.1. Сложение в прямых д-кодах
- •6.2. Сложение чисел в инверсных д-кодах
- •Для кода д2
- •6.3. Сдвиг д-кодов
- •6.4. Умножение чисел в д-кодах
- •6.5. Деление чисел в д-кодах
- •6.6. Перевод чисел в д-кодах
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, выполняется путем формирования дополнительного кода делителя.