|
|||||||
|
000010 |
|
000010 |
|
|
000000 |
|
|
|
000010 |
|
|
|
|
|
В блоке 7 (см. табл. 3.1), на выходную шину ШиВых вначале выдается старшая часть результата умножения, а затем – младшая часть.
старшая часть
младшая часть
Веса
разрядов
210
29
28
27
26
25
24
23
22
21
20
0
0
0
0
1
0
0
0
0
0
1
0
знак
Модуль произведения
Рис. 3.8. Число Z=X×Y=+130 с фиксированной
запятой в формате двойной длины
Результат умножения чисел в формате двойной длины представлен на рис. 3.8.
3.3. АЛУ для деления чисел
с фиксированной запятой
В ЭВМ операция деления чисел с фиксированной запятой с помощью соответствующих алгоритмов сводится к операциям вычитания (иногда также сложения) и сдвига.
Реализовать деление можно двумя основными способами:
- деление с неподвижным делимым и сдвигаемым вправо делителем. Этот способ деления основан на прямом копировании действий при ручном делении. Недостатком такого способа является двойная длина сумматора и его регистров в АЛУ. Данный способ не нашёл широкого распространения и поэтому рассматриваться не будет;
- деление с неподвижным делителем и сдвигаемым влево делимым. Этот способ позволяет строить АЛУ с сумматором одинарной длины (см. рис. 3.9). Здесь неподвижный делитель (Y) хранится в Рг1, а делимое (X), сдвигаемое влево относительно делителя, находится в двух регистрах: старшие разряды делимого – в Рг3, а младшие – в Рг2. Арифметико-логические устройства рассмотренного типа широко используются для деления.
Данный способ имеет две разновидности:
- алгоритм деления с неподвижным делителем с восстановлением остатка;
- алгоритм деления с неподвижным делителем без восстановления остатка.
Алгоритм деления с неподвижным делителем с восстановлением остатка можно разделить на следующие этапы:
1. Берутся модули от делимого и делителя (то есть знаковые разряды делимого и делителя обнуляются). Необходимо отметить, что, как в алгоритме деления с восстановлением остатка, так и в алгоритме деления без восстановления остатка, знак частного фиксируется равным нулю (т.е. знак частного - положительный). Для первого алгоритма это происходит в блоке 9 (см. рис. 3.10). Для второго алгоритма это происходит в блоке 17 (см. рис. 3.11) при первом проходе цикла получения разрядов частного. В счётчик циклов СчЦ устанавливается значение разрядности регистров;
2. Исходное значение частичного остатка полагается равным старшим разрядам делимого. В данном алгоритме делимое имеет двойную длину, так как младшая и старшая часть делимого содержится в разных регистрах (см. рис. 3.9). Чтобы делимое, как и делитель, имело одинарную длину, в данном случае можно условно принять, что делимое имеет двойную длину с нулями в разрядах старшей половины делимого. Для этого все разряды Рг3 обнуляются, в разряды Рг2 заносятся разряды делимого. Поэтому исходное значение частичного остатка равно нулю;
3. Частичный остаток удваивается путём сдвига на 1 разряд влево. При этом в освобождающийся при сдвиге младший разряд частичного остатка заносится очередная цифра делимого из разрядов младшей половины делимого (из нулевого разряда Рг2[0]);
4. Из сдвинутого частичного остатка вычитается делитель и анализируется знак результата вычитания;
5. Если результат вычитания положителен (См[0] = 0), то очередная цифра модуля частного равна 1 (Рг2’[n-1]:=1). Если же результат вычитания отрицателен (См[0] = 1), то очередная цифра модуля частного равна 0 (Рг2’[n-1]:=0).
В последнем случае остаток восстанавливается таким, каким он был до вычитания (восстановление из РгB);
6. Этапы 3, 4 и 5 последовательно выполняются для получения всех цифр модуля частного;
7. Знак частного положителен, если знаки делимого и делителя одинаковы, в противном случае – отрицательный.
Микропрограмма деления чисел с восстановлением остатка для случая положительных чисел приведена на рис 3.10.
Поясним процесс восстановления остатка. Если вычитание даёт отрицательный результат (См[0] = 1), то предыдущий частичный остаток, хранящийся в РгB, передаётся в РгСм, для чего предварительно обнуляется РгA. В РгСм приём осуществляется со сдвигом влево на 1 разряд. Это обеспечивает восстановление прежнего остатка и смещение его относительно делителя перед очередным вычитанием.
Рассмотренный метод носит название деление с восстановлением остатка. Недостатком этого метода является необходимость дополнительного времени на восстановление остатка.
Деление с восстановлением остатка всегда требует для получения одной цифры частного сдвиг частичного остатка, вычитание делителя, а иногда и восстановление остатка.
Обычно в ЭВМ для деления используется другой метод – деление без восстановления остатка.
Алгоритм деления с неподвижным делителем без восстановления остатка можно разделить на следующие этапы:
1. – 3. Этапы 1, 2 и 3 совпадают с соответствующими этапами предыдущего алгоритма;
- Если остаток положителен (См[0] = 0), то из сдвинутого частичного остатка вычитается делитель;
Если же остаток отрицателен (См[0] = 1), то к сдвинутому частичному остатку прибавляется делитель;
- Если результат
вычитания положителен (См[0] = 0), то очередная цифра модуля частного
равна 1 (Рг2’[n-1]:=1). Если же результат вычитания отрицателен (См[0] =
1), то очередная цифра модуля частного равна 0
(Рг2’[n-1]:=0); - Этапы 3, 4 и 5 последовательно выполняются для получения всех цифр модуля частного;
- Знак частного положителен, если знаки делимого и делителя одинаковы, в противном случае – отрицательный.
Микропрограмма деления чисел без восстановления остатка для случая положительных чисел приведена на рис. 3.11.
Рис. 3.11. Микропрограмма деления целых чисел с
фиксированной запятой без восстановления остатка
Из
микропрограммы видно, что, пока не определены все цифры частного (СчЦ ¹ 0), в зависимости от знака частичного остатка либо
подсуммируется делитель (при См[0] = 1), либо вычитается делитель (при См[0] =
0). У полученного нового частичного остатка анализируется знак и по нему
определяется цифра частного. По завершении всех циклов деления (СчЦ = 0)
выдаётся результат. При этом, если остаток отрицателен (См[0] = 1), то он восстанавливается
путём подсуммирования делителя (см блок 13 на
рис. 3.11).
Частичные остатки после выполнения сложения при делении без восстановления остатка получаются такими же, как и после сдвига восстановленного остатка при делении с восстановлением остатка.
Деление без восстановления остатка всегда требует для получения одной цифры частного сдвига частичного остатка, а также сложения или вычитания делителя.
Пример1: Пусть X = +23, Y = +5. Вычислить Z = X / Y, где X, Y и Z – числа с фиксированной запятой. При делении использовать алгоритм деления чисел с фиксированной запятой с восстановлением остатка.
В данном примере для представления чисел с фиксированной запятой выделим 6 разрядов, причём старший разряд – знаковый. Делимое X показано на рис. 3.12.а, делитель Y показан на рис. 3.12.б.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
При использовании материалов активная ссылка на источник обязательна.