Поясним табл. 1.5. В первом такте умножения рассматривается первая пара разрядов множителя bnbn+1 = b3b4 = 10, во втором такте – вторая пара – b2b3 = 11, в третьем такте – пара b1b2 = 01, в четвертом такте – пара b0b1 = 10. Следует также обратить внимание
Поясним табл. 1. 5. В первом такте умножения рассматривается первая пара разрядов множителя bnbn+1 = b3b4 = 10, во втором такте – вторая пара – b2b3 = 11, в третьем такте – пара b1b2 = 01, в четвертом такте – пара b0b1 = 10. Следует также обратить внимание, что при сдвиге суммы частных произведений вправо цифра в разряде знака не изменяется (так называемый, арифметический сдвиг). В последнем такте после суммирования сдвиг вправо не выполняется (вес разряда b0 = 20). Как видно из табл. 1. 5, произведение отрицательное, получилось сразу в дополнительном коде и равно значению, которое было вычислено для контроля перед началом умножения по рассматриваемому алгоритму.
Таблица 1. 5
1. 9. Деление двоичных чисел Рассматриваем операцию деления двоичных чисел, представленных в форме с фиксированной запятой. В общем случае это может быть деление мантисс. Определим постановку задачи: C =A / B; |A| < 1; |B| < 1; A ≠ 0; B ≠ 0. Используются два основных способа: - деление чисел, представленных в прямых кодах; - деление чисел, представленных в дополнительных кодах. 1. 9. 1. Операция деления в прямых кодах Отметим следующие основные особенности алгоритма: 1) К началу деления числа должны быть представлены в прямых кодах; 2) Операция деления выполняется над модулями;
3) Знак частного определяется логическим путем; 4) Операция сравнения модулей может выполняться с использованием любого из рассмотренных выше способов вычитания; 5) Алгоритм в основных чертах соответствует алгоритму деления вручную. Основное отличие состоит в том, что на каждом шаге деления вместо сдвига влево частичной разности (как это делается при ручном счете) сдвигается вправо делитель. 6) На каждом i-том шаге сравниваются по модулю частичная разность Ri и делитель |Bi|. При этом последовательно будут получаться цифры частного. Если | Ri|< |B|, то C[i]=0; | Ri+1|=| Ri|. Если | Ri|≥ |B|, то C[i]=1; | Ri+1|=| Ri|-|Bi|, где Ci — цифра частного, полученная на i-том шаге. Предлагаемый алгоритм рассмотрим подробно на числовом примере А=-3/16 [А]п=1. 0011; |A|=. 0011 B=12/16 [В]п= 0. 1100; |B|=. 1100 Операцию сравнение будем выполнять в дополнительном модифицированном коде, для этого запишем [-|B|]дм = 11. 0100 Пример запишем в виде таблицы 1. 6. Таблица 1. 6
Как следует из этого пример, на очередном такте сравнения сдвигается вправо на 1 разряд делитель (умножается на 2-1). Цифры частного получаются, начиная со старшего разряда, и заносятся в регистр результата с помощью операции сдвига влево. Поскольку после второго такта частичная разность R3=0, очевидно, что следующие цифры частного также будут нули. Итак, |С|= 0. 0100 = 1/4. Знак произведения — отрицательный, окончательный ответ: С = 1. 0100. 1. 9. 2. Операция деления в дополнительных кодах Особенности алгоритма:
1) Делимое и делитель хранятся в памяти в дополнительных кодах и в этом же виде принимаются в АЛУ; 2) Операция вычитание выполняется по алгоритму ДД в дополни- тельном модифицированном коде; 3) Цифры знака частного получаются автоматически в процессе деления на нулевом и первом тактах сравнения; 4) Переполнение разрядной сетки определяется по несовпадению цифр в знаковых разрядах. 5) Результат записывается в память без всяких преобразований. 6) Правила формирования очередной цифры частного и остатка более сложные, чем в рассмотренном выше алгоритме деления в прямых кодах. Кроме того, эти правила различны на нулевом шаге сравнения и на всех последующих шагах. 7) Вычисляем C=A / B. Правила на нулевом такте сравнения: если ЗНА = ЗНВ, то С0 =0 R1 = А – В, если ЗНА ¹ ЗНВ, то С0 = 1 R1 = А + В. Правила на всех последующих i – тых тактах сравнения если ЗНRi = ЗНВ, то Сi = 1 R i+1 = R i • 2 - В если ЗНRi ¹ ЗНВ, то Сi = 0 R i+1 = Ri • 2 + В Рассмотрим пример деления чисел, представленных в дополни тельном коде, в соответствии с приведенным алгоритмом. Зададим исходные данные для наглядности в десятичном коде. С= А / В А= 15 / 32 В= - 24 / 32 очевидно С = -5 / 8. Представим эти числа в двоичном дополнительном коде, то есть в том виде, в котором они хранятся в ОЗУ и вводятся в регистры АЛУ. [РГА]пм: = [А]дм =00. 01111 [РГВ]пм: =[В]дм = 11. 01000 ( Условная точка отделяет знаковые разряды. ) Так как в соответствии с алгоритмом делитель должен либо складываться с остатком, либо вычитаться из остатка, то заготовим прямой и дополнительный коды делителя. Итак, в первом случае будем прибавлять [РГВ]мп = 11. 01000, во втором - будем использовать [РГВ]мд = 00. 11000 Процесс вычислений представим в виде табл. 1. 7. В нашем примере вычисления выполняются с точностью до 5-ти двоичных разрядов после запятой. В столбце Ci последовательно получаем цифры частного, начиная со старших разрядов в дополнительном модифицированном коде. [C]мд =11. 01011 для проверки запишем результат в прямом коде [C]п = 1. 10101 Переведем результат в десятичный код: С = - 21/32 ~ -5/8 Как видно из таблицы, произведение отрицательное, получилось сразу в дополнительном коде и равно значению, которое было вычислено для контроля перед началом умножения по рассматриваемому алгоритму.
Таблица 1. 7
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|