|
Значения Тг1=0 и Сч1[0¸1]=01 показывают, что отрицательного и положительного переполнения не произошло.
В РгСм формируется окончательный результат операции умножения. Так как ТгЗн1=ТгЗн2, то РгСм[0]:=0. Смещённый порядок Сч1[1¸7] заносится в соответствующие разряды РгСм[1¸7].
Двоичное произведение Z представлено на рис. 4.7:
Веса разрядов
26
25
24
23
22
21
20
23
22
21
20
2-1
2-2
2-3
2-4
2-5
2-6
0
1
0
0
0
1
0
0
1
1
1
1
1
0
1
0
0
0
знак
смещённый порядок
мантисса
Рис. 4.7. Двоичный результат операции умножения Z=X×Y=15,625
Преобразуем двоичное произведение Z к десятичному виду:
Z =1 ´ 23 + 1 ´ 22 + 1 ´ 21 + 1 ´ 20 + 1 ´ 2-1 + 0 ´ 2-2 + 1 ´ 2-3 + 0 ´
´2-4 + 0 ´ 2-5 + 0 ´ 2-6 = 15,625
4.3. Алгоритм деления чисел с плавающей запятой
Деление чисел с плавающей запятой выполняется в соответствии с формулой:
Z=,
где S - основание системы счисления;
pX - порядок делимого;
pY - порядок делителя;
pZ - порядок частного;
- мантисса делимого;
- мантисса делителя;
- мантисса частного.
При делении чисел с плавающей запятой мантисса частного равна частному от деления мантиссы делимого на мантиссу делителя, а порядок частного - разности порядков делимого и делителя.
Если делимое равно нулю, то в частное может быть записан ноль без выполнения деления. Если при вычитании порядков образовалось переполнение с положительным знаком, или, если делитель равен нулю, то деление не производится и формируется сигнал прерывания.
При делении нормализованных чисел с плавающей запятой может оказаться, что мантисса делимого больше мантиссы делителя, и мантисса частного образуется с переполнением. Поэтому перед делением мантисс нарушают нормализацию мантиссы делимого сдвигом на 1 разряд вправо.
Обычно деление мантисс выполняется по методу без восстановления остатка с неподвижным делителем аналогично делению двоичных чисел с фиксированной запятой.
Частному присваивается знак плюс, если делимое и делитель имеют одинаковые знаки, и знак минус, если знаки разные.
Многофункциональное АЛУ для деления чисел с плавающей запятой (см. рис. 4.1) использует: сумматор См; регистры Рг1 и Рг2 для приёма соответственно делителя и делимого; регистры РгА и РгВ для передачи на сумматор смещенных порядков делителя и делимого при получении разности порядков и для передачи на сумматор мантиссы делителя и частичного остатка при получении мантиссы частного; счетчик Сч1 для хранения смещенного порядка частного; регистры Рг2 и Рг2’ для хранения цифровых разрядов мантиссы частного; триггеры знаков делимого и делителя ТгЗн2 и ТгЗн1.
Последовательность выполнения операции деления на функциональных узлах многофункционального АЛУ можно обобщить и выделить следующие этапы:
- прием операндов X и Y;
- проверка мантиссы делителя на равенство нулю;
- проверка мантиссы делимого на равенство нулю;
- вычисление смещённого порядка частного;
- проверка мантиссы делимого и делителя;
- деление мантисс;
- формирование окончательного результата.
Алгоритм операции деления в многофункциональном АЛУ приведён на рис. 4.8. Этапы выполнения разделены пунктирной линией. В блоках микрооперации, выполняемые в разных тактах, разделяются горизонтальной чертой.
Приём операндов X и Y выполняется в блоке 1. В первом такте производится приём первого операнда (делителя) в Рг1. Во втором такте производится фиксация знака принятого операнда в триггере знака ТгЗн1. В этом же такте можно принять второй операнд (делимое) в Рг2. В третьем такте производится фиксация знака второго операнда в триггере знака ТгЗн2.
Мантиссы операндов X и Y нормализованы.
Рис. 4.8. Микропрограмма деления чисел с плавающей
запятой без восстановления остатка
Проверка мантиссы делителя на равенство нулю осуществляется в блоке 2. Так как для числа с плавающей запятой 0 разряд используется для представления знака числа, разряды с 1 по 7 используются для представления смещённого порядка (характеристики) числа, то 8 разряд будет соответствовать старшему разряду мантиссы. Так как у числа, отличного от нуля, старший разряд нормализованной мантиссы равен 1, то, таким образом, если этот разряд в мантиссе делителя равен 0, то вырабатывается прерывание по делению на ноль.
Проверка мантиссы делимого на равенство нулю осуществляется в блоке 3 и заключается в проверке старшего разряда нормализованной мантиссы делимого на равенство нулю. Если это так, то в частное записывается 0 без выполнения деления.
Вычисление смещённого порядка частного производится в блоках с 4 по 9. Необходимо отметить, что знаковые разряды (старшие разряды) делимого и делителя, находящихся в регистрах Рг2 и Рг1 на этом этапе обнуляются, так как они уже были скопированы в триггеры знаков на этапе приёма операндов. Это необходимо для использования этих разрядов при вычислении смещённого порядка частного, а также при вычислении разности мантисс. В обоих случаях разряды используются для анализа знака результата.
Для вычисления смещённого порядка частного во входной регистр сумматора РгА заносится смещённый порядок делителя в дополнительном коде, а во входной регистр сумматора РгВ заносится смещённый порядок делимого в прямом коде. Затем на сумматоре производится суммирование РгА и РгВ.
В результате в левом байте сумматора См[0¸7] образуется разность порядков делимого и делителя. Первоначально анализируются значения разрядов См[0] и См[1]:
- если См[0¸1] = 00, то получен положительный не переполненный порядок. Отсутствие переполнения фиксируется триггером Тг1 (Тг1: = 0);
- если См[0¸1] = 01, то имеет место положительное переполнение порядка. В этом случае вырабатывается сигнал прерывания по переполнению порядка и деления не происходит;
- если См[0¸1] = 11, то получен отрицательный порядок. Отсутствие переполнения порядка фиксируется установкой Тг1: = 0;
Во всех трёх случаях для получения смещённого порядка в Сч1[0¸7] нулевой разряд Сч1[0] обнуляется, в первый разряд Сч1[1] заносится инвертированное значение первого разряда сумматора См[1], а в разряды Сч1[2¸7] заносятся соответствующие разряды с выхода сумматора См[2¸7].
- если же См[0¸1] = 10, то получено отрицательное переполнение порядка, но исчезновение порядка не фиксируется, так как переполнение может исчезнуть при денормализации. Факт переполнения фиксируется установкой Тг1: = 1. Для получения смещённого порядка в Сч1[0¸7] в нулевой разряд Сч1[0] заносится значение нулевого разряда сумматора См[0], в первый разряд Сч1[1] заносится инвертированное значение первого разряда сумматора См[1], а в разряды Сч1[2¸7] заносятся соответствующие разряды с выхода сумматора См[2¸7].
Проверка мантиссы делимого и делителя осуществляется в блоках с 10 по 12. Если при делении нормализованных чисел с плавающей запятой мантисса делимого больше мантиссы делителя, то мантисса частного образуется с переполнением (мантисса частного больше 1). Поэтому в данном случае перед делением мантисс делимое денормализуется на 1 разряд вправо. То есть мантисса делимого смещается на 1 разряд вправо. При этом порядок частного, находящийся в Сч1 необходимо увеличить на 1. Если же мантисса делимого меньше мантиссы делителя, то происходит переход к подпрограмме деления мантисс без денормализации.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
При использовании материалов активная ссылка на источник обязательна.